温馨提示×

kafka在centos上的故障排查步骤有哪些

小樊
35
2025-12-13 15:46:11
栏目: 智能运维

Kafka 在 CentOS 上的故障排查步骤

一 快速判定与最小复现

  • 查看服务状态与日志:使用 systemctl status kafkajournalctl -u kafka -n 100 --no-pager 获取 systemd 与进程输出;同时 tail Kafka 日志(如 /var/log/kafka/server.log 或安装目录下的 logs/server.log)定位异常堆栈与关键字(如 Zookeeper 连接失败、端口占用、目录不可写)。
  • 前台运行排除 systemd 干扰:切换到安装目录执行前台启动,直接观察控制台输出,例如:
    /opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
    若前台能起、systemd 起不来,多半是 Type/ExecStart/权限/依赖 等配置问题。
  • 最小连通性验证:
    • 列出 Topic:/opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
    • 控制台生产/消费:
      /opt/kafka/bin/kafka-console-producer.sh --topic test --bootstrap-server localhost:9092
      /opt/kafka/bin/kafka-console-consumer.sh --topic test --bootstrap-server localhost:9092 --from-beginning
      以上可快速判断 Broker 是否可用、网络与 ACL 是否阻断。

二 依赖与资源配置检查

  • 依赖服务:确认 Zookeeper 已启动且可连接(单机或集群),Kafka 配置 zookeeper.connect 正确;如使用 systemd,确保 After=network.target zookeeper.service
  • 关键配置:核对 server.propertiesbroker.id(唯一)listeners/advertised.listeners(对外可达地址)、log.dirs(数据目录存在且可写)、以及端口(默认 9092)。
  • Java 环境:Kafka 需要 Java 8+;确认 JAVA_HOME 正确、版本匹配;必要时在 systemd 单元中显式声明 Environment=“JAVA_HOME=…”
  • 资源与限制:检查 内存/磁盘空间(df -h、free -h),以及 文件描述符限制(ulimit -n);在 systemd 中设置如 LimitNOFILE=65536 以避免 “Too many open files”。
  • 常见报错对照:
    • “Could not connect to Zookeeper” → Zookeeper 未起或连接串错误
    • “Log directory … does not exist or is not writable” → log.dirs 缺失或权限不足
    • “Address already in use” → 9092 端口被占用
    • “Fatal error during KafkaServer startup. Prepare to shutdown” → 配置/依赖/资源任一异常均可能触发,需结合日志定位根因

三 网络连通性与防火墙

  • 端口与进程:确认 9092 监听且仅 Kafka 占用:
    netstat -tlnp | grep 9092 或 lsof -i :9092
    如冲突,修改 listeners 端口或释放占用进程。
  • 本机与跨机连通:
    • 本机:nc -vz 127.0.0.1 9092
    • 远程:nc -vz <broker_ip> 9092
      若跨机不通,优先检查 firewalld/iptables 策略(放行 9092/tcp),以及云厂商 安全组 规则。
  • 监听与对外地址:若客户端在外部网络,确保 advertised.listeners 配置为客户端可达的 IP/DNS;仅改 listeners 不改 advertised.listeners 常导致“能连上但拿不到元数据”。

四 systemd 与服务管理专项

  • 单元文件要点:
    • Type=forking(若启动脚本以守护进程方式拉起 Kafka)
    • ExecStart/ExecStop 指向正确的启停脚本或命令
    • User=kafka、Group=kafka(避免 root 运行)
    • Restart=on-failure、RestartSec=10
    • SuccessExitStatus=0 143(兼容脚本信号退出)
    • LimitNOFILE=65536、Environment=“JAVA_HOME=…”
  • 排查流程:
    • 查看状态与日志:systemctl status kafka;journalctl -u kafka -n 100 --no-pager
    • 前台直跑启动脚本,确认不是脚本逻辑导致“启动即退”
    • 修正单元文件后执行 systemctl daemon-reload 再启
  • 典型现象与修复:
    • “Active: failed … Main PID … code=exited, status=1/FAILURE” → 多为脚本拉起子进程后立即退出或依赖未就绪;核对 Type、SuccessExitStatus 与 After= 依赖。

五 常见症状与修复对照表

症状 快速检查 修复建议
systemctl 启动失败,提示 Failed to start Kafka Server journalctl -u kafka;tail server.log 按日志关键字定位:Zookeeper、log.dirs、端口、权限等,逐项修复后重启
启动即退或报 Fatal error 前台启动观察输出;检查 server.properties 修正配置错误(如 broker.id 冲突、listeners/advertised.listeners、zookeeper.connect)、确保目录可写
端口 9092 被占用 netstat -tlnp 结束占用进程或修改 listeners 端口
客户端连不上或超时 本机/远程 nc 测试;检查 advertised.listeners 开放 firewalld/iptables/安全组;将 advertised.listeners 设为客户端可达地址
内存不足无法启动 dmesg grep -i oom;free -h
磁盘满或不可写 df -h;ls -ld log.dirs 清理旧日志/扩容磁盘;修正 log.dirs 权限与路径
Topic 元数据超时(TimeoutException) 控制台 list/create 测试 确认 Broker 已起、网络可达、advertised.listeners 正确、Zookeeper 正常

0