Kafka的日志文件是故障排查的核心依据,通常位于/path/to/kafka/logs/server.log(默认路径可通过server.properties中的log.dirs确认)。使用以下命令查看最新日志:
tail -n 500 /path/to/kafka/logs/server.log | grep -i "error\|exception" # 过滤错误和异常信息
通过日志中的具体报错(如NotLeaderForPartitionException、Connection refused),可快速定位问题根源。
使用systemctl命令确认Kafka服务是否正在运行:
systemctl status kafka
若服务未启动,尝试启动并查看启动结果:
systemctl start kafka
systemctl status kafka # 确认启动是否成功
若启动失败,需结合日志进一步分析原因。
Kafka依赖Zookeeper集群存储元数据,需确保Zookeeper服务正常运行:
systemctl status zookeeper
若Zookeeper未启动,启动它并检查日志(通常位于/var/log/zookeeper/):
systemctl start zookeeper
tail -n 200 /var/log/zookeeper/zookeeper.log
常见问题是Zookeeper集群节点未全部启动或zookeeper.connect配置错误。
Kafka的配置文件(通常位于/path/to/kafka/config/server.properties)是故障排查的关键,需重点检查以下参数:
broker.id:每个Broker必须有唯一的ID(整数),集群中不可重复;listeners:Broker监听的地址和端口(如PLAINTEXT://0.0.0.0:9092),需与服务器IP匹配;advertised.listeners:客户端连接的地址和端口(如PLAINTEXT://your_server_ip:9092),需确保客户端可访问;zookeeper.connect:Zookeeper集群地址(如localhost:2181或zk1:2181,zk2:2181,zk3:2181),需与Zookeeper实际地址一致;log.dirs:数据存储目录(如/var/lib/kafka),需确保目录存在且有写入权限。Kafka默认使用9092端口(listeners配置决定),需确认端口未被其他进程占用:
netstat -tuln | grep 9092 # 或使用 ss -tuln | grep 9092
若端口被占用,可通过以下方式解决:
kill -9 <PID>(需确认进程合法性);listeners配置,更换端口(如9093),并重启服务。Kafka需要足够的磁盘空间存储消息数据,若磁盘空间不足(剩余空间<10%),可能导致Broker无法启动或写入失败:
df -h # 查看各分区磁盘使用情况
若磁盘空间不足,清理无用文件(如旧日志、临时文件)或扩容磁盘。
Kafka运行的用户(通常为kafka)需对以下目录有读写权限:
/path/to/kafka/config);log.dirs指定的目录,如/var/lib/kafka);logs目录,如/path/to/kafka/logs)。chown -R kafka:kafka /path/to/kafka/config /var/lib/kafka /path/to/kafka/logs
若权限不足,Kafka可能无法启动或写入数据。
确保Kafka服务器与客户端、Zookeeper集群之间的网络通畅:
ping <client_ip>;telnet <client_ip> 9092(若未安装telnet,可使用nc -zv <client_ip> 9092);firewall-cmd --zone=public --add-port=9092/tcp --permanent
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --reload
若网络不通,需调整防火墙规则或检查网络设备配置。
NotLeaderForPartitionException:表示当前Broker不是分区的Leader。解决方法:检查Zookeeper中的分区副本状态(使用kafka-topics.sh --describe --topic <topic_name> --bootstrap-server <broker_ip>:9092),确保Leader副本正常;若副本状态异常,可使用kafka-reassign-partitions.sh重新分配副本。Connection refused:客户端无法连接到Broker。解决方法:检查Broker是否启动(systemctl status kafka)、端口是否正确(listeners配置)、防火墙是否开放(firewall-cmd --list-ports)。ZooKeeper connection timeout:Kafka无法连接到Zookeeper。解决方法:检查Zookeeper服务状态(systemctl status zookeeper)、zookeeper.connect配置是否正确、网络是否通畅(ping <zookeeper_ip>)。在完成上述排查并解决问题后,重启Kafka服务使配置生效:
systemctl stop kafka
systemctl start kafka
systemctl status kafka # 确认服务状态
通过以上步骤,可覆盖CentOS上Kafka常见的故障场景。若问题仍未解决,建议收集日志信息(server.log、zookeeper.log)并在Kafka社区(如Stack Overflow、Kafka官方论坛)寻求帮助。