1. 检查Kafka服务状态
使用systemctl status kafka命令确认Kafka服务是否处于运行状态(显示“active (running)”)。若服务未启动,执行systemctl start kafka启动服务;若启动失败,需结合日志进一步分析原因。
2. 查看Kafka日志定位错误
Kafka的核心日志文件通常位于/var/log/kafka/server.log(路径可通过server.properties中的log.dirs配置确认)。使用tail -f /var/log/kafka/server.log实时查看最新日志,重点搜索ERROR、FATAL或WARN级别的异常信息(如NotLeaderForPartitionException、SocketTimeoutException),这些信息能直接指向故障根源。
3. 验证Zookeeper连接
Kafka依赖Zookeeper实现集群管理(如Broker注册、分区Leader选举)。执行bin/zkServer.sh status检查Zookeeper服务状态(需显示“Mode: leader”或“Mode: follower”);若Zookeeper不可用,需检查其日志(通常位于/var/log/zookeeper/)和配置(zoo.cfg),确保Kafka的zookeeper.connect配置(如localhost:2181)正确。
4. 检查Kafka配置文件正确性
Kafka的主配置文件通常为/etc/kafka/server.properties(或/opt/kafka/config/server.properties),需重点核查以下关键配置:
broker.id:集群内唯一标识,不可重复;listeners:Broker监听的地址(如PLAINTEXT://0.0.0.0:9092);advertised.listeners:客户端连接的地址(需与客户端网络可达,如PLAINTEXT://kafka-node1:9092);zookeeper.connect:Zookeeper集群地址(如node1:2181,node2:2181,node3:2181);log.dirs:数据存储目录(需有足够磁盘空间)。5. 测试网络连通性
Kafka集群内Broker之间、Broker与客户端之间的网络通信必须正常。使用ping <broker_ip>测试Broker间的网络连通性;使用telnet <broker_ip> <port>(如telnet kafka-node1 9092)测试端口是否可达。若网络不通,需检查防火墙设置(iptables -L -n)或安全组规则,确保端口开放。
6. 检查硬件资源使用情况
df -h /var/lib/kafka/data(或log.dirs指定的目录)检查数据目录磁盘使用率,若超过80%,需清理旧日志(如调整log.retention.hours配置)或扩容磁盘;top -p $(pgrep kafka)查看Kafka进程的内存占用,若内存不足,需调整KAFKA_HEAP_OPTS(如-Xmx8G -Xms8G);top或htop查看CPU占用率,若持续过高,需检查是否因高负载(如大量消息写入)或配置不合理(如num.network.threads过小)导致。7. 验证客户端功能正常性
使用Kafka自带的命令行工具测试生产者和消费者功能:
bin/kafka-console-producer.sh --broker-list <broker_ip>:<port> --topic test,输入消息并观察是否能成功发送;bin/kafka-console-consumer.sh --bootstrap-server <broker_ip>:<port> --topic test --from-beginning,查看是否能消费到生产者发送的消息。若生产或消费失败,需检查客户端配置(如bootstrap.servers)或网络问题。8. 检查Topic与分区状态
使用bin/kafka-topics.sh --list --bootstrap-server <broker_ip>:<port>列出所有Topic;使用bin/kafka-topics.sh --describe --topic <topic_name> --bootstrap-server <broker_ip>:<port>查看Topic的详细信息(如分区数、Leader副本、ISR列表)。重点关注:
min.insync.replicas,可能导致写入失败);9. 监控集群健康状态
使用监控工具(如Prometheus+Grafana、Confluent Control Center)实时监控Kafka集群的关键指标:
UnderReplicatedPartitions升高表示复制延迟),并及时设置警报。10. 常见故障场景处理
kafka-topics.sh --describe确认分区Leader状态;log.dirs配置的目录是否存在,使用logrotate工具定期清理旧日志(如按时间或大小分割),或调整log.retention.hours(如设置为168小时,即7天)和log.segment.bytes(如设置为1GB);lsof -i:<port>(如lsof -i:9092)查看占用端口的进程,使用kill -9 <pid>终止冲突进程,或修改Kafka的listeners配置更换端口。