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