Ubuntu Kafka故障排查常用方法
使用systemctl命令确认Kafka服务是否处于运行状态,若未运行则启动服务并设置开机自启。
sudo systemctl status kafka # 查看服务状态
sudo systemctl start kafka # 启动服务
sudo systemctl enable kafka # 设置开机自启
Kafka的日志文件(默认位于/var/log/kafka/server.log)记录了详细的错误信息和异常堆栈,是定位故障的核心依据。使用tail命令实时查看最新日志:
tail -500 /var/log/kafka/server.log # 查看最近500行日志
sudo tail -f /var/log/kafka/server.log # 实时跟踪日志输出
检查server.properties(通常位于/etc/kafka/或Kafka安装目录下)的关键配置项是否正确,重点关注:
listeners:Broker监听的地址和端口(如PLAINTEXT://your_server_ip:9092);advertised.listeners:客户端连接的地址和端口(需与集群内其他Broker一致);zookeeper.connect:Zookeeper集群连接串(如localhost:2181或zk1:2181,zk2:2181,zk3:2181);log.dirs:日志数据存储目录(需确保目录存在且有写入权限)。cat /etc/kafka/server.properties | grep -E "listeners|advertised.listeners|zookeeper.connect|log.dirs"
确保Kafka Broker之间、Broker与客户端之间的网络通信正常:
ping命令测试Broker之间的网络连通性;telnet或nc命令测试端口是否可达(如Kafka的9092端口、Zookeeper的2181端口):ping your_kafka_broker_ip # 测试网络连通性
telnet your_kafka_broker_ip 9092 # 测试端口可达性
nc -zv your_kafka_broker_ip 9092 # 替代telnet的端口测试命令
Kafka的性能高度依赖硬件资源,使用以下命令检查CPU、内存、磁盘的占用情况:
top或htop(按1查看每个核心的使用率);free -h(查看已用/可用内存);df -h(检查log.dirs所在分区的剩余空间,建议保留20%以上);iostat -x 1 10(查看磁盘的读写延迟、吞吐量,await值过高表示IO瓶颈)。top # 实时查看CPU和内存使用
df -h # 查看磁盘空间
iostat -x 1 10 # 监控磁盘IO(需安装sysstat包)
Kafka提供的命令行工具可用于快速测试生产和消费功能,验证集群基本功能是否正常:
kafka-console-producer.sh);kafka-console-consumer.sh);kafka-topics.sh)。# 生产消息(本地Broker,端口9092,主题test_topic)
kafka-console-producer.sh --broker-list localhost:9092 --topic test_topic
# 消费消息(从最早的消息开始读取)
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test_topic --from-beginning
# 查看Topic详情
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic test_topic
Kafka依赖Zookeeper实现集群协调(如Leader选举、分区管理),需确保Zookeeper服务正常运行:
sudo systemctl status zookeeper;/var/log/zookeeper/):tail -500 /var/log/zookeeper/zookeeper.log;zkCli.sh工具连接Zookeeper,检查Kafka相关的节点是否存在:sudo systemctl status zookeeper # 检查Zookeeper服务状态
zkCli.sh -server localhost:2181 # 连接Zookeeper(默认端口2181)
ls /brokers/ids # 查看已注册的Broker节点
借助第三方监控工具实现对Kafka集群的长期监控和告警,快速发现性能瓶颈或异常:
jconsole、jmc等工具连接Kafka Broker的JMX端口(默认9999),监控关键指标(如消息入队速率、消费延迟、分区Leader分布);kafka_exporter采集Kafka指标,用Grafana展示 dashboard(如Broker负载、Topic积压情况);compression.type)、批量发送大小(batch.size)、分区数量(num.partitions)及磁盘IO性能;kafka-consumer-groups.sh查看REBALANCE状态),确认消费者数量是否足够;group.id)、订阅的主题是否存在(kafka-topics.sh --list),确认消费者是否正常启动(无ConsumerCoordinatorNotAvailableException错误)。