Kafka在Linux上的故障排查指南
首先确认Kafka服务是否正在运行,使用systemctl命令查看状态:
systemctl status kafka
若服务未启动,尝试启动:systemctl start kafka;若启动失败,需进一步排查日志或配置问题。
Kafka的日志文件(通常位于/var/log/kafka/server.log或/path/to/kafka/logs/server.log)是故障定位的核心依据。使用tail命令实时查看最新日志:
tail -f /var/log/kafka/server.log
重点关注ERROR、WARN级别的日志,如NotLeaderForPartitionException(分区Leader异常)、SocketTimeoutException(网络超时)等。
Kafka的主配置文件通常为/etc/kafka/server.properties,需检查以下关键参数:
broker.id:每个Broker的唯一标识(集群内不可重复);listeners:Broker监听的地址和端口(如PLAINTEXT://0.0.0.0:9092);advertised.listeners:客户端连接的Broker地址(需与客户端网络可达的地址一致);zookeeper.connect:Zookeeper集群地址(如localhost:2181);log.dirs:Kafka数据存储目录(需确保磁盘空间充足)。Kafka集群内各Broker之间、Broker与客户端之间的网络通信必须正常。使用以下命令测试:
ping <broker_ip>:检查IP连通性;telnet <broker_ip> <port>(如telnet 192.168.1.100 9092):检查端口是否开放;nc -zv <broker_ip> <port>(netcat工具):快速检测端口连通性。Kafka的性能高度依赖硬件资源,需监控以下指标:
df -h查看log.dirs所在磁盘的剩余空间(建议保留20%以上);top或htop查看Kafka进程的内存占用(需根据KAFKA_HEAP_OPTS配置调整JVM堆内存);top查看CPU占用率(User过高可能为业务逻辑问题,Sys过高可能为系统调用问题,Wait过高可能为磁盘I/O问题)。Kafka依赖Zookeeper实现集群管理(如分区Leader选举、元数据存储)。需检查:
systemctl status zookeeper;bin/zkCli.sh -server <zookeeper_ip>:2181进入Zookeeper命令行,执行ls /brokers/ids查看Broker注册信息(若为空,说明Broker未成功连接)。Kafka提供了多个命令行工具用于快速诊断:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test(创建Topic)、bin/kafka-topics.sh --list --bootstrap-server localhost:9092(列出所有Topic);bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test(发送消息)、bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning(消费消息,验证消息收发是否正常)。bin/kafka-topics.sh --describe --topic <topic_name> --bootstrap-server <broker_ip>:9092检查分区Leader状态,若Leader未分配,可能需要重启Broker或修复ISR(In-Sync Replicas)。netstat -tuln | grep <port>(如netstat -tuln | grep 9092)检查端口占用,若被占用,可修改Kafka的listeners配置或终止占用进程(kill -9 <pid>)。log.dirs目录下的旧日志文件(可通过log.retention.hours配置日志保留时间),或扩容磁盘。使用监控工具(如Prometheus+Grafana、Confluent Control Center)实时监控Kafka集群的以下指标:
messages_in_per_sec);request_latency_ms);leader_count);under_replicated_partitions)。