Kafka在Linux上的故障排查步骤
首先确认Kafka服务是否正常运行,使用systemctl status kafka命令查看服务状态。若未运行,尝试启动服务(systemctl start kafka)并设置开机自启(systemctl enable kafka)。对于启动失败的情况,需进一步检查日志定位具体原因。
Kafka的日志文件(通常位于/var/log/kafka/server.log或/path/to/kafka/logs/server.log)是故障排查的核心线索。使用tail -f命令实时查看最新日志,重点关注ERROR、FATAL级别的错误信息(如启动失败、连接异常、复制延迟等),结合错误内容缩小排查范围。
Kafka依赖Zookeeper实现集群管理,需确保Zookeeper服务正常运行(systemctl status zookeeper)。使用kafka-topics.sh --list --bootstrap-server <broker_ip>:<port>命令测试与Zookeeper的连接,若连接失败,需检查Zookeeper集群状态、网络连通性及zookeeper.connect配置项的正确性。
重点核查Kafka配置文件(server.properties)的关键参数:
broker.id:必须唯一,不能与其他Broker重复;listeners:指定Broker监听的地址和端口(如PLAINTEXT://0.0.0.0:9092);advertised.listeners:客户端连接的地址(需确保客户端可达);zookeeper.connect:Zookeeper集群地址(如zk1:2181,zk2:2181,zk3:2181);log.dirs:数据存储目录(需有足够磁盘空间)。使用ping <broker_ip>测试Broker节点间的网络连通性,使用telnet <broker_ip> <port>(如telnet localhost 9092)测试端口是否开放。若网络不通,需检查防火墙设置(iptables -L -n)或安全组规则,确保Kafka所需端口(默认9092)未被阻止。
df -h检查Kafka数据目录(log.dirs)的磁盘使用情况,若剩余空间不足(建议保留20%以上),需清理旧日志或扩容磁盘;top -p $(pgrep kafka)查看Kafka进程的内存(RES列)、CPU(%CPU列)使用情况。若内存不足,可调整KAFKA_HEAP_OPTS环境变量(如-Xmx8G -Xms8G);若CPU过高,需分析线程堆栈(top -H -p <kafka_pid>)或优化配置(如调整num.partitions、batch.size)。使用kafka-topics.sh --list --bootstrap-server <broker_ip>:<port>列出所有主题,使用kafka-topics.sh --describe --topic <topic_name> --bootstrap-server <broker_ip>:<port>查看主题详情(分区数、副本数、Leader分布)。若分区不均衡(某Broker负载过高),可使用kafka-reassign-partitions.sh工具重新分配分区;若副本同步滞后(UnderReplicatedPartitions指标大于0),需检查网络或磁盘性能。
使用Kafka自带的命令行工具测试生产者和消费者功能:
kafka-console-producer.sh --broker-list <broker_ip>:<port> --topic test(输入消息并发送);kafka-console-consumer.sh --bootstrap-server <broker_ip>:<port> --topic test --from-beginning(消费消息)。若生产者发送失败(如RecordTooLargeException),需调整message.max.bytes(Broker)和max.request.size(Producer)参数;若消费者滞后(Consumer Lag高),需优化max.poll.records、fetch.min.bytes参数或增加消费者数量。使用Prometheus+Grafana搭建Kafka监控体系,实时监控集群的关键指标(如吞吐量、延迟、UnderReplicatedPartitions、CPU/Memory使用率)。通过监控趋势快速定位异常(如UnderReplicatedPartitions上升表示副本同步问题,Consumer Lag上升表示消费能力不足),并结合报警机制及时处理。