一、故障排查基础步骤
systemctl status kafka命令确认Kafka服务是否运行。若未运行,尝试启动服务(systemctl start kafka)并观察启动日志(journalctl -u kafka -f)中的错误信息。/var/log/kafka/目录(如server.log),通过tail -f /var/log/kafka/server.log实时查看最新错误(如NotLeaderForPartitionException、SocketTimeoutException),这是定位问题的核心线索。bin/zkServer.sh status检查Zookeeper状态(需确保集群中多数节点正常)。若Zookeeper异常,需先修复Zookeeper(如重启服务、修复数据一致性)。server.properties(通常位于/etc/kafka/或Kafka安装目录的config/下)需重点核查以下参数: broker.id:集群内必须唯一;listeners:Broker监听的地址(如PLAINTEXT://0.0.0.0:9092);advertised.listeners:客户端连接的地址(需与客户端网络可达);zookeeper.connect:Zookeeper集群地址(如192.168.1.1:2181,192.168.1.2:2181);log.dirs:数据目录(需存在且可写)。ping <broker_ip>测试Broker节点间的网络连通性,用telnet <broker_ip> <port>(如telnet 192.168.1.1 9092)验证端口是否开放。若网络不通,需检查防火墙(iptables -L -n)或安全组规则。df -h /var/lib/kafka/data查看数据目录磁盘空间(需预留20%以上空间),top或htop查看CPU使用率(单Broker CPU使用率超过80%需优化),free -m查看内存使用情况(避免内存溢出)。二、常见故障及解决方法
lsof -i:<port>(如lsof -i:9092)查找占用端口的进程,用kill -9 <pid>终止进程,再重启Kafka;Invalid configuration,需核对server.properties中的参数(如log.dirs路径是否存在、zookeeper.connect格式是否正确);systemctl status zookeeper),修复Zookeeper后再启动Kafka。bootstrap.servers配置(需指向正确的Broker地址),用kafka-console-producer.sh --broker-list <broker_ip>:9092 --topic test测试生产者是否能发送消息;kafka-console-consumer.sh --bootstrap-server <broker_ip>:9092 --topic test --from-beginning测试消费者是否能接收消息,检查消费者组是否正常(kafka-consumer-groups.sh --describe --group <group_id> --bootstrap-server <broker_ip>:9092)。batch.size=32768、linger.ms=10),启用压缩(compression.type=gzip)减少网络负载;kafka-topics.sh --alter --topic <topic_name> --partitions 20 --bootstrap-server <broker_ip>:9092增加分区数(需确保业务允许分区调整)。systemctl status kafka);kafka-topics.sh --describe --topic <topic_name> --bootstrap-server <broker_ip>:9092检查分区Leader状态(若Leader为-1,需等待Leader选举完成);bootstrap.servers需包含所有Broker地址,避免单点故障)。log.retention.hours=168),可通过修改配置缩短保留时间,或手动删除log.dirs下的旧数据目录(需确保数据已备份);三、恢复与优化建议
log.dirs下的数据;kafka-leader-election.sh手动触发选举(谨慎使用)。server.properties、zookeeper数据目录和log.dirs中的重要Topic数据(可使用kafka-backup工具);