Linux环境下Kafka故障排查方法
确认Kafka服务是否正常运行,使用systemctl status kafka命令查看服务状态。若未运行,尝试启动服务(systemctl start kafka)并观察启动日志(journalctl -u kafka -f)中的错误信息。
Kafka的日志文件(通常位于/var/log/kafka/server.log或/opt/kafka/logs/server.log)是故障排查的核心线索。通过tail -f实时查看最新日志,重点关注ERROR、FATAL级别的错误信息(如端口冲突、磁盘满、ZooKeeper连接失败等)。
检查Kafka主配置文件(通常为/etc/kafka/server.properties),确保关键参数配置正确:
broker.id:集群内唯一标识,不可重复;listeners:Broker监听的地址和端口(如PLAINTEXT://0.0.0.0:9092);advertised.listeners:客户端连接的地址(需与客户端配置一致);zookeeper.connect:ZooKeeper集群地址(如zk1:2181,zk2:2181,zk3:2181);log.dirs:数据目录(需存在且可写)。确保Kafka节点之间、客户端与Broker之间的网络畅通:
ping命令测试Broker节点间的连通性;telnet或nc命令测试端口是否可达(如telnet <broker_ip> 9092);iptables -L -n),确保未阻止Kafka所需的端口。检查服务器硬件资源使用情况,避免因资源不足导致故障:
top、htop查看CPU使用率,若长期超过80%,需优化JVM配置或增加CPU资源;free -m查看内存剩余量,调整Kafka的KAFKA_HEAP_OPTS(如-Xmx8G -Xms8G);df -h查看磁盘空间(log.dirs所在分区剩余空间需大于20%),使用iostat -x 1查看磁盘I/O负载(%util超过80%需优化磁盘或扩容);iftop、nethogs查看网络带宽使用情况,避免带宽瓶颈。Kafka依赖ZooKeeper进行集群管理,需确保ZooKeeper服务正常:
systemctl status zookeeper检查ZooKeeper服务状态;echo stat | nc <zookeeper_ip> 2181查看ZooKeeper节点状态(Mode应为leader或follower);/var/log/zookeeper/zookeeper.log)中的错误信息。确认Topic和分区的配置正确性及健康状态:
kafka-topics.sh --list --bootstrap-server <broker_ip>:9092查看所有Topic;kafka-topics.sh --describe --topic <topic_name> --bootstrap-server <broker_ip>:9092查看Topic的分区数、副本因子、Leader分布(Leader需均匀分布在各Broker上);Isr列表需包含所有副本),若存在UnderReplicatedPartitions(未同步分区),需排查副本同步问题。针对Producer/Consumer的常见故障进行排查:
RecordTooLargeException需调整message.max.bytes、max.request.size;NotLeaderForPartitionException需检查Leader分布);kafka-consumer-groups.sh --describe --group <group_id> --bootstrap-server <broker_ip>:9092查看消费延迟(records_lag_max),排查消费速度慢的原因(如消费逻辑耗时、分区数不足、Consumer数量不够)。借助监控工具实现实时监控与告警:
kafka-run-class.sh kafka.tools.JmxTool查看JMX指标(如吞吐量、延迟);IllegalArgumentException(如broker.id非正整数)、BindException(端口被占用),调整配置或释放端口;kafka-log-dirs.sh --clean),调整log.retention.ms(缩短日志保留时间);num.replica.fetchers(副本拉取线程数)、调大replica.fetch.max.bytes(副本拉取缓冲区大小),检查网络带宽。