温馨提示×

CentOS上Kafka故障排查如何进行

小樊
45
2026-01-02 05:52:35
栏目: 智能运维

CentOS 上 Kafka 故障排查实操手册

一 快速定位流程

  • 查看服务状态与日志:优先用 systemd 与 journalctl 拿到完整错误输出,再查看 Kafka 的 server.log
    示例:
    • systemctl status kafka -l
    • journalctl -u kafka -n 200 --no-pager
    • tail -n 200 /opt/kafka/logs/server.log
  • 前台启动定位启动期报错:将后台启动改为前台运行,直接观察异常堆栈。
    示例:/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
  • 依赖与连通性自检:确认 Zookeeper 已就绪(如使用 KRaft 则跳过 ZK 自检)、端口 9092 未被占用、网络与防火墙策略放行。
  • 最小连通性验证:用控制台生产者/消费者测试元数据与收发。
    示例:
    • /opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_ip>:9092 --list
    • /opt/kafka/bin/kafka-console-producer.sh --bootstrap-server <broker_ip>:9092 --topic test
    • /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server <broker_ip>:9092 --topic test --from-beginning
  • 资源与系统限制:检查 内存 OOM磁盘空间文件句柄数 等是否触发限制。
    以上步骤能覆盖大多数“起不来、连不上、报错不明确”的场景,并快速缩小根因范围。

二 常见故障与修复要点

  • 启动失败或闪退
    • 检查关键配置:broker.id 唯一log.dirs 目录存在且可写zookeeper.connect 正确(KRaft 使用 process.roles 与 controller.quorum.voters)、listeners/advertised.listeners 对外可达。
    • 资源与依赖:确认 Java 版本兼容磁盘空间充足Zookeeper 已启动(或 KRaft 法定人数就绪)。
    • 端口冲突:默认 9092,如被占用需释放或改端口。
  • 无法连接或元数据超时
    • 网络与防火墙:放通 9092/tcp,跨主机连通性用 telnet/nc 验证。
    • 监听地址错误:确保 advertised.listeners 返回客户端可达的 IP/域名,避免仅回环地址。
    • 客户端引导:优先使用 bootstrap.servers 多个 broker 地址 提高容错。
  • Rebalance 失败
    • 常见诱因:消费者重启/网络抖动、group.id 一致但配置不一致、版本不兼容。
    • 处理:核对 group.id/client.id、稳定网络、必要时升级客户端版本并重启消费者。
  • 消费者滞后(Lag)
    • 成因:生产速率过高、消费逻辑慢、分区不均、网络延迟。
    • 优化:提升消费并行度(增加分区/消费者)、优化消费逻辑、开启压缩、必要时扩容。
  • 日志滚动与磁盘占满
    • 调整保留策略:log.retention.hours / log.retention.bytes / log.segment.bytes,并配置合理的清理/压缩策略。
      以上为高频问题及处置要点,可结合日志与监控逐项核对。

三 配置与网络关键点

  • listeners 与 advertised.listeners
    • 明确协议与地址,例如:
      listeners=PLAINTEXT://0.0.0.0:9092
      advertised.listeners=PLAINTEXT://<服务器对外IP>:9092
    • 客户端必须能通过 advertised.listeners 回连,否则会出现超时或仅本机能连的现象。
  • 依赖与版本
    • 确认 Java 8+ 可用且路径正确;如使用 KRaft(Kafka 3.3+),按 KRaft 模式配置 process.roles / controller.quorum.voters / broker.id / log.dirs
  • 资源与系统限制
    • 提升文件句柄与进程数(limits.conf),示例:
      • soft nofile 65536
      • hard nofile 65536
      • soft nproc 65536
      • hard nproc 65536
    • 如用 systemd 托管,在单元文件设置:LimitNOFILE=65536,并合理配置 Type/Restart。
  • 防火墙与安全策略
    • 放通 9092/tcp;必要时仅对业务网段开放,避免暴露公网。
      这些要点直接影响“能否被发现、能否连得上、能否稳定跑”,是排查网络与配置类问题的首要检查项。

四 监控与长期观测

  • JMX 直连观测
    • 在 Kafka 启动脚本中开启 JMX 端口,使用 JConsole/JMXTrans 观察关键指标:UnderReplicatedPartitions、IsrShrinksPerSec、ActiveControllerCount、OfflinePartitionsCount、BytesIn/OutPerSec、RequestLatencyAvg、ConsumerLag
  • 可视化与告警
    • Prometheus + Grafana:采集 Broker/主题/消费者组指标并配置阈值告警。
    • EFAK(Eagle for Apache Kafka):提供集群/主题/消费组视图与告警。
    • Burrow:专注 Consumer Lag 检测与告警。
  • 命令行巡检
    • 主题与分区:kafka-topics.sh --describe
    • 消费组与滞后:kafka-consumer-groups.sh --describe --group
      建议至少保留 JMX + 一套可视化平台,并建立关键指标的阈值告警,便于提前发现问题。

五 一键排查命令清单

  • 服务与日志
    • systemctl status kafka -l;journalctl -u kafka -n 200 --no-pager;tail -n 200 /opt/kafka/logs/server.log
  • 进程与端口
    • ps -ef | grep kafka;ss -lntp | grep 9092;lsof -i :9092;netstat -tulpen | grep 9092
  • 连通性与元数据
    • nc -vz <broker_ip> 9092;telnet <broker_ip> 9092
    • /opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_ip>:9092 --list
  • 资源与限制
    • free -h;df -h;ulimit -a;dmesg | tail -n 50(排查 OOM)
  • 前台启动定位
    • /opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
      以上命令覆盖“看状态、看日志、看端口、看连通、看资源、看前台报错”的完整闭环,适合作为日常巡检与应急脚本的基础。

0