Kafka集群故障排查在Debian上的方法
java -version确认Java版本是否符合要求;若未安装,使用sudo apt install openjdk-11-jdk -y安装。systemctl status kafka检查Kafka服务是否运行;若未启动,用sudo systemctl start kafka启动服务。systemctl status zookeeper确认ZooKeeper服务状态;使用zkCli.sh进入ZooKeeper shell,执行ls /brokers/ids查看连接的Broker节点,若有节点失联需重启对应Kafka进程。/var/log/kafka/server.log(或/opt/kafka/logs,取决于安装路径),使用tail -f /var/log/kafka/server.log实时查看最新日志,重点关注ERROR、WARN级别的错误信息(如Input/Output error、SocketTimeoutException)。journalctl -u kafka或tail -f /var/log/syslog查看系统级日志,排查与Kafka相关的系统错误(如Buffer I/O error、Out of memory)。Cannot allocate memory)崩溃,会生成hs_err_pid*.log文件(位于Kafka工作目录),分析该文件可定位内存溢出或JVM配置问题。top(实时查看CPU、内存占用)、free -h(查看内存剩余)、df -h(查看磁盘空间)命令,确保系统有足够资源运行Kafka(建议内存预留1GB以上,磁盘空间剩余20%以上)。iostat -x 1(需安装sysstat包)监控磁盘I/O利用率(%util)和平均等待时间(await),若%util接近100%或await过高,说明磁盘存在瓶颈(如机械硬盘故障、SSD寿命耗尽)。ping测试Broker间网络连通性,telnet <broker-ip> 9092(替换为实际端口)检查端口是否可达;若网络不通,排查防火墙(iptables -L)或安全组配置。/etc/kafka/server.properties(或/opt/kafka/config/server.properties)中的以下参数:
listeners:确保监听地址和端口配置正确(如PLAINTEXT://0.0.0.0:9092);advertised.listeners:确保对外宣布的地址与客户端访问地址一致(如PLAINTEXT://broker1.example.com:9092);zookeeper.connect:确保ZooKeeper连接字符串正确(如broker1:2181,broker2:2181,broker3:2181);log.dirs:确保日志目录存在且Kafka有写权限(chmod -R 755 /var/log/kafka)。kafka-topics.sh --bootstrap-server <broker-ip>:9092 --describe查看Topic的分区分布、Leader副本及ISR(In-Sync Replicas)列表,确保分区Leader均匀分布(避免单节点负载过高),且ISR列表包含所有副本(无数据丢失风险)。jps -l | grep Kafka查看Kafka进程是否存活;若进程不存在,结合日志分析启动失败原因(如端口冲突、配置错误)。tcpdump -i eth0 port 9092 -w kafka.pcap抓取Kafka端口的流量,通过Wireshark分析客户端与服务端的通信是否正常(如SYN包未响应、数据包丢失)。kafka_server_brokertopicmetrics_messages_in_total(生产消息速率)下降超过50%、kafka_controller_offline_partitions_count(离线分区数)大于0),当指标异常时通过邮件、短信通知运维人员。netstat -tuln | grep <端口号>(如netstat -tuln | grep 9092)检查端口占用进程,通过kill -9 <PID>终止占用进程,或修改Kafka配置中的listeners端口。-Xloggc:/var/log/kafka/gc.log),若Full GC频繁(如每分钟1次以上)或老年代内存持续增长,需调整JVM堆大小(-Xms4G -Xmx4G)或修复代码中的内存泄漏(如未关闭的Producer/Consumer)。kafka-topics.sh --bootstrap-server <broker-ip>:9092 --alter --topic <topic-name> --partitions <新分区数>增加分区,再通过kafka-reassign-partitions.sh工具将分区迁移到负载较低的Broker。