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
以上命令覆盖“看状态、看日志、看端口、看连通、看资源、看前台报错”的完整闭环,适合作为日常巡检与应急脚本的基础。