Kafka故障排查实用方法
systemctl status kafka(或sudo systemctl status kafka)确认Kafka服务是否运行;若未运行,通过systemctl start kafka启动服务,并通过systemctl enable kafka设置开机自启。/var/log/kafka/server.log(或/path/to/kafka/logs/server.log),使用tail -f实时查看最新日志,或tail -500查看最近500条记录,重点关注ERROR、WARN级别的错误信息(如端口冲突、ZooKeeper连接失败、磁盘空间不足等)。server.properties(通常位于/etc/kafka/或/path/to/kafka/config/),重点确认以下关键配置:broker.id(集群内唯一)、listeners(Broker监听地址,如PLAINTEXT://0.0.0.0:9092)、advertised.listeners(客户端访问地址,如PLAINTEXT://your-domain:9092)、zookeeper.connect(ZooKeeper集群地址,如localhost:2181)、log.dirs(数据目录,需可写)。zkServer.sh status(Kafka自带工具)检查ZooKeeper状态;若未运行,通过zkServer.sh start启动;若连接失败,检查zookeeper.connect配置是否正确,以及ZooKeeper日志(默认/var/lib/zookeeper/logs/zookeeper.out)中的错误信息。ping <broker-ip>测试Broker之间的网络可达性;使用telnet <broker-ip> <port>(如telnet 192.168.1.100 9092)测试端口连通性,确保无网络隔离或防火墙阻挡。bootstrap.servers(如localhost:9092)与advertised.listeners一致,尤其是Docker/Kubernetes环境下,需使用外部可访问的IP或域名。top(查看CPU占用)、free -h(查看内存剩余)、df -h(查看磁盘空间)命令,重点关注:
-Xmx/-Xms,如-Xmx4G -Xms4G);log.dirs下的旧数据(如超过7天的日志),或扩展存储设备。batch.size(批量发送大小,默认16KB)、开启compression.type(消息压缩,如snappy)、增大buffer.memory(缓冲区大小,默认32MB);fetch.min.bytes(每次拉取的最小数据量,默认1B)、调整fetch.max.wait.ms(拉取等待时间,默认500ms)、提升消费者并发度(增加num.consumer.fetchers或消费者实例);num.io.threads线程数,默认8)。kafka-topics.sh --alter --topic <topic-name> --partitions <new-partition-count>)、提升消费者并发度(增加消费者实例或num.streams)、开启消息压缩(compression.type=snappy)。kafka-topics.sh --describe --topic <topic-name> --bootstrap-server <broker-ip>:<port>查看分区Leader分布,若某Broker持有过多Leader分区(如超过总分区数的50%),使用kafka-reassign-partitions.sh工具重新分配分区(需提前创建JSON格式的分区分配方案)。kafka-topics.sh --describe查看ISR(In-Sync Replicas,同步副本集合),若ISR列表持续缩小(如因副本落后过多被踢出),调整min.insync.replicas(最小同步副本数,默认1)或修复落后副本(如重启故障Broker)。Rebalance started),调整session.timeout.ms(会话超时时间,默认10s,建议设置为3-5s以上)、max.poll.interval.ms(单次poll最大间隔,默认5min,建议根据业务处理时间调整)、增大heartbeat.interval.ms(心跳间隔,默认3s)。enable.auto.commit=true时,若业务处理未完成就宕机,重启后会重复消费;解决方法是设置enable.auto.commit=false,在业务处理完成后手动提交偏移量(commitSync()或commitAsync());enable.auto.commit=false时,若提交偏移量前宕机,重启后会漏消费;解决方法是确保业务逻辑处理完成后再提交偏移量,或使用幂等性处理(如基于消息ID判重)。kafkacat:命令行工具,用于查看Topic消息(kafkacat -b <broker-ip>:<port> -t <topic-name> -e)、查看Broker信息(kafkacat -L -b <broker-ip>:<port>);strimzi-kafka-cli:Strimzi提供的工具,用于收集集群诊断数据(如日志、配置、指标);9999),监控JVM内存、GC情况、线程状态等。