centos中kafka故障如何排查
小樊
36
2026-01-08 01:39:48
CentOS 上 Kafka 故障排查清单
一 快速定位路径
- 先看服务状态与最近日志,确认是进程未起、起不来还是起后很快退出:
- 查看状态与日志:
- systemd:执行systemctl status kafka -l,若提示“start-limit/主进程退出码异常”,说明启动脚本或环境有问题;查看journalctl -xeu kafka获取更详细上下文。
- 前台启动以获取实时报错:在 $KAFKA_HOME 执行bin/kafka-server-start.sh config/server.properties(不要加 -daemon),观察标准输出/错误输出。
- 直连本机验证监听:执行ss -lntp | grep 9092或netstat -tulpen | grep 9092确认 9092 端口已被监听;若未监听,多半是配置或依赖问题导致进程未成功绑定端口。
- 基础资源检查:执行free -m、df -h、iostat -x 1,排除内存不足、磁盘满、I/O 异常等常见诱因。
二 常见故障与修复要点
- 依赖与配置类
- ZooKeeper 未就绪:Kafka 强依赖 ZooKeeper,先确认 2181 端口连通与 zk 集群健康(如用 zkCli.sh stat),再启动 Kafka。
- 目录与权限:检查 server.properties 的 log.dirs 所在路径是否存在、挂载是否正常、目录属主/权限是否允许 Kafka 进程写入。
- 端口冲突:确认 9092 未被其他进程占用;如冲突,修改 listeners/port 或释放占用进程。
- 防火墙/SELinux:内网测试可临时关闭防火墙(如 systemctl stop firewalld),线上应放通 2181/9092;必要时将 SELINUX=permissive 验证是否为策略导致。
- 主机名与监听地址:客户端常因 listeners/advertised.listeners 配置不当连不上。建议显式配置为内网 IP,例如:
- listeners=PLAINTEXT://0.0.0.0:9092
- advertised.listeners=PLAINTEXT://<本机内网IP>:9092
- advertised.host.name 与 advertised.port 在新版本中已不推荐,优先使用 advertised.listeners。
- 资源与系统限制
- 内存不足:启动报 Cannot allocate memory 或频繁 OOM,先释放内存或降低 KAFKA_HEAP_OPTS(如 -Xmx2G -Xms2G),必要时优化其他进程占用。
- 文件句柄与进程数:Kafka 连接多、文件多,建议将 nofile/nproc 提升到至少 65536(/etc/security/limits.conf),并重启会话后验证 ulimit -a。
- 数据与一致性
- 磁盘满/日志保留:执行 du -sh $KAFKA_DATA,并按需调整 log.retention.hours/bytes、log.segment.bytes,清理过期日志释放空间。
- 分区不可用/副本不同步:用 kafka-topics.sh --describe 查看 Leader/ISR,若副本滞后或缺失,先恢复网络/磁盘,再考虑增加副本或执行分区重分配。
三 关键命令与示例
- 本机连通与服务探测
- 端口监听:ss -lntp | grep 9092
- 元数据探测(本机):bin/kafka-topics.sh --list --bootstrap-server localhost:9092
- 远程连通与防火墙
- 端口可达:telnet <broker_ip> 9092 或 nc -vz <broker_ip> 9092
- 临时放通(测试环境):firewall-cmd --add-port=9092/tcp --permanent && firewall-cmd --reload
- 配置与状态核查
- advertised.listeners 示例(server.properties):
- listeners=PLAINTEXT://0.0.0.0:9092
- advertised.listeners=PLAINTEXT://192.168.1.10:9092
- 查看主题与分区状态:bin/kafka-topics.sh --describe --bootstrap-server <broker_ip>:9092 --topic
- 资源与系统
- 句柄与进程限制:ulimit -a;编辑 /etc/security/limits.conf 设置 * soft/hard nofile 与 nproc 为 65536*。
四 服务化与 systemd 专项
- 若使用 systemd 启动失败并出现“start-limit/主进程退出码 127”等,优先在前台直接运行启动脚本以获取真实报错;常见原因包括:
- ExecStart 路径错误(脚本不存在或权限不足)
- Type=forking 但脚本未正确后台化或未按预期 fork
- 依赖顺序不当(After= 未正确包含 zookeeper.service)
- 环境变量缺失(如 JAVA_HOME/KAFKA_HOME 未设置)
- 修正后执行:systemctl daemon-reload && systemctl restart kafka,再用 journalctl -xeu kafka 跟进。
五 性能与稳定性加固建议
- 系统层面
- 文件句柄与进程数至少 65536;磁盘优先 SSD;多盘可分散 log.dirs 提升并行 I/O;监控 CPU/内存/磁盘/网络 四大指标。
- JVM 与网络
- 合理设置堆与 Direct Memory,例如:
- KAFKA_HEAP_OPTS=-Xmx8G -Xms8G
- KAFKA_JVM_PERFORMANCE_OPTS=-server -XX:+UseG1GC -XX:MaxDirectMemorySize=1G
- 开启压缩降低网络压力:compression.type=producer。