Kafka故障排查配置指南
1. 检查Kafka服务状态
首先确认Kafka服务是否处于运行状态。在Linux系统中,可使用systemctl命令查看服务状态:
systemctl status kafka
若服务未启动,使用systemctl start kafka启动;若启动失败,需进一步排查日志或配置问题。
2. 查看Kafka日志文件
Kafka日志是故障定位的核心依据,日志文件通常位于/var/log/kafka/(默认路径)或config目录下(如server.log)。使用以下命令实时查看最新日志:
tail -f /var/log/kafka/server.log
重点关注ERROR、WARN级别的日志,如NotLeaderForPartitionException(分区Leader异常)、SocketTimeoutException(网络超时)等,这些信息能直接指向故障根源。
3. 验证Kafka配置文件
Kafka的主配置文件为server.properties(位于config目录),需检查以下关键配置项的正确性:
broker.id:每个Broker的唯一标识,集群内不能重复;listeners:Broker监听的地址和端口(如PLAINTEXT://0.0.0.0:9092),需确保与客户端连接的地址一致;advertised.listeners:客户端访问Broker的地址(如PLAINTEXT://broker1:9092),需设置为外部可访问的地址(若Broker在NAT后,需配置公网IP或域名);zookeeper.connect:ZooKeeper集群地址(如localhost:2181或zk1:2181,zk2:2181,zk3:2181),需确保ZooKeeper服务正常;log.dirs:Kafka数据存储目录(如/var/lib/kafka/data),需确保目录存在且有写入权限;num.partitions:Topic默认分区数(如3),需根据业务负载调整(建议单分区吞吐量超过10MB/s时增加分区);replication.factor:Topic副本数(如3),需满足高可用需求(集群Broker数≥副本数)。
4. 测试网络连通性
Kafka集群内Broker之间、Broker与客户端之间的网络通信是基础。使用以下命令测试网络连通性:
- Ping测试:
ping,确认Broker IP可达; - Telnet测试:
telnet(如telnet broker1 9092),确认端口未被防火墙阻挡。
5. 检查硬件资源使用
Kafka的性能高度依赖硬件资源,需检查以下指标:
- 磁盘空间:使用
df -h查看log.dirs所在磁盘的剩余空间(建议保留20%以上),避免因磁盘满导致写入失败; - 内存使用:使用
free -h查看系统内存,确保Kafka的JVM堆内存(-Xmx、-Xms)设置合理(通常为物理内存的1/4-1/2); - CPU使用:使用
top或htop查看Kafka进程的CPU占用率(若长期超过80%,需优化配置或扩容)。
6. 确认ZooKeeper状态
Kafka依赖ZooKeeper实现集群管理(如Broker注册、分区Leader选举)。使用以下命令检查ZooKeeper状态:
- ZooKeeper服务状态:
systemctl status zookeeper(Linux); - ZooKeeper集群状态:进入ZooKeeper客户端(
zkCli.sh -server),执行:2181 stat命令,确认Mode为leader或follower(集群正常)。
7. 检查端口占用情况
Kafka默认使用9092端口(生产环境可能调整),需确保端口未被其他进程占用。使用以下命令检查端口占用:
netstat -tuln | grep 9092 或 ss -tuln | grep 9092
若端口被占用,可修改server.properties中的listeners配置(如改为9093),或停止占用端口的进程(kill -9 )。
8. 验证配置生效
修改配置文件后,需重启Kafka服务使配置生效:
systemctl restart kafka
重启后,再次检查服务状态(systemctl status kafka)和日志(tail -f /var/log/kafka/server.log),确认无报错。
9. 常见配置相关故障及解决方法
NotLeaderForPartitionException:通常因分区Leader不在当前Broker或副本不同步导致。解决方法:使用kafka-topics.sh --describe --topic查看分区Leader状态,若ISR(同步副本集合)为空,需修复副本同步(如重启滞后副本的Broker);--bootstrap-server :9092 SocketTimeoutException:通常因网络延迟或Broker负载过高导致。解决方法:调整request.timeout.ms(默认30000ms)和socket.timeout.ms(默认30000ms)参数,增加超时时间;InvalidConfigurationException:通常因配置文件语法错误或参数值不合法导致。解决方法:检查配置文件的格式(如key=value,无多余空格),确保参数值符合要求(如replication.factor不能超过Broker数量)。