Kafka在Linux上的故障排查指南
首先确认Kafka服务是否正常运行,使用systemctl命令查看状态:
systemctl status kafka
若服务未启动,尝试启动:systemctl start kafka;若启动失败,需进一步排查日志。
Kafka的日志文件(通常位于/var/log/kafka/或/opt/kafka/logs/)包含故障详细信息,使用以下命令实时查看最新日志:
tail -f /var/log/kafka/server.log
重点关注ERROR、FATAL级别的日志(如NotLeaderForPartitionException、SocketTimeoutException),这些日志会直接指向故障根源。
检查Kafka主配置文件(server.properties)的关键参数,确保配置正确:
broker.id:每个Broker的唯一标识(集群内不能重复);listeners:Broker监听的地址和端口(如PLAINTEXT://0.0.0.0:9092);advertised.listeners:客户端连接的地址(需与客户端网络可达,如PLAINTEXT://broker1:9092);zookeeper.connect:Zookeeper集群地址(如localhost:2181);log.dirs:数据存储目录(需有足够磁盘空间)。Kafka依赖Zookeeper进行集群管理,需确保Zookeeper服务正常运行:
systemctl status zookeeper;systemctl start zookeeper;kafka-topics.sh创建或列出Topic,若失败则检查网络或Zookeeper配置。确保Kafka节点之间、Kafka与客户端之间的网络畅通:
ping测试节点间网络可达性:ping <broker_ip>;telnet测试端口连通性:telnet <broker_ip> 9092(若端口不通,需检查防火墙或安全组设置)。检查服务器硬件资源使用情况,避免资源瓶颈:
top、htop查看CPU使用率(若java进程占用过高,可能存在GC问题);free -m查看内存剩余(若内存不足,需调整JVM堆内存KAFKA_HEAP_OPTS);df -h查看磁盘空间(log.dirs所在分区剩余空间需大于10%);iostat -x 1查看磁盘读写延迟(%util超过80%需优化存储或调整Kafka参数)。使用Kafka自带工具测试生产者和消费者功能,验证集群是否正常工作:
bin/kafka-console-producer.sh --broker-list <broker_ip>:9092 --topic test(输入消息并观察是否成功发送);bin/kafka-console-consumer.sh --bootstrap-server <broker_ip>:9092 --topic test --from-beginning(查看是否能消费到消息);bin/kafka-topics.sh --list --bootstrap-server <broker_ip>:9092(确认Topic是否存在)。kafka-topics.sh --describe --topic <topic_name> --bootstrap-server <broker_ip>:9092),确保Leader副本正常;若分区副本数不足,调整default.replication.factor(建议设置为3)。netstat -tuln | grep 9092显示端口被占用,修改server.properties中的listeners配置(如改为9093),并重启Kafka。df -h查看磁盘空间,清理log.dirs目录下的旧日志(可通过kafka-configs.sh调整log.retention.hours缩短日志保留时间)。systemctl status zookeeper),确保zookeeper.connect配置正确(如localhost:2181),并检查防火墙是否允许Zookeeper端口(默认2181)。使用监控工具实时跟踪Kafka集群状态,提前预警故障:
Prometheus + Grafana监控Broker的CPU、内存、磁盘I/O、网络吞吐量等指标;Kafka Manager、Burrow(监控Consumer Lag)、Confluent Control Center查看Topic分区状态、副本同步情况、生产者/消费者延迟等;ELK(Elasticsearch+Logstash+Kibana)收集和分析Kafka日志,快速定位历史故障。