温馨提示×

Ubuntu Kafka故障排查有哪些常用方法

小樊
56
2025-09-19 21:16:53
栏目: 智能运维

Ubuntu Kafka故障排查常用方法

1. 检查Kafka服务状态

使用systemctl命令确认Kafka服务是否处于运行状态,若未运行则启动服务并设置开机自启。

sudo systemctl status kafka          # 查看服务状态
sudo systemctl start kafka           # 启动服务
sudo systemctl enable kafka          # 设置开机自启

2. 查看Kafka日志文件

Kafka的日志文件(默认位于/var/log/kafka/server.log)记录了详细的错误信息和异常堆栈,是定位故障的核心依据。使用tail命令实时查看最新日志:

tail -500 /var/log/kafka/server.log  # 查看最近500行日志
sudo tail -f /var/log/kafka/server.log  # 实时跟踪日志输出

3. 验证Kafka配置文件

检查server.properties(通常位于/etc/kafka/或Kafka安装目录下)的关键配置项是否正确,重点关注:

  • listeners:Broker监听的地址和端口(如PLAINTEXT://your_server_ip:9092);
  • advertised.listeners:客户端连接的地址和端口(需与集群内其他Broker一致);
  • zookeeper.connect:Zookeeper集群连接串(如localhost:2181zk1:2181,zk2:2181,zk3:2181);
  • log.dirs:日志数据存储目录(需确保目录存在且有写入权限)。
cat /etc/kafka/server.properties | grep -E "listeners|advertised.listeners|zookeeper.connect|log.dirs"

4. 测试网络连通性

确保Kafka Broker之间、Broker与客户端之间的网络通信正常:

  • 使用ping命令测试Broker之间的网络连通性;
  • 使用telnetnc命令测试端口是否可达(如Kafka的9092端口、Zookeeper的2181端口):
ping your_kafka_broker_ip            # 测试网络连通性
telnet your_kafka_broker_ip 9092     # 测试端口可达性
nc -zv your_kafka_broker_ip 9092     # 替代telnet的端口测试命令

5. 监控硬件资源使用

Kafka的性能高度依赖硬件资源,使用以下命令检查CPU、内存、磁盘的占用情况:

  • CPU使用率tophtop(按1查看每个核心的使用率);
  • 内存使用率free -h(查看已用/可用内存);
  • 磁盘空间df -h(检查log.dirs所在分区的剩余空间,建议保留20%以上);
  • 磁盘IO性能iostat -x 1 10(查看磁盘的读写延迟、吞吐量,await值过高表示IO瓶颈)。
top                                  # 实时查看CPU和内存使用
df -h                                # 查看磁盘空间
iostat -x 1 10                       # 监控磁盘IO(需安装sysstat包)

6. 使用Kafka自带命令行工具

Kafka提供的命令行工具可用于快速测试生产和消费功能,验证集群基本功能是否正常:

  • 生产消息:向指定主题发送测试消息(kafka-console-producer.sh);
  • 消费消息:从指定主题读取消息(kafka-console-consumer.sh);
  • 查看Topic元信息:检查Topic的分区数、副本分布(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

7. 检查Zookeeper状态

Kafka依赖Zookeeper实现集群协调(如Leader选举、分区管理),需确保Zookeeper服务正常运行:

  • 检查Zookeeper服务状态:sudo systemctl status zookeeper
  • 查看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节点

8. 利用监控工具

借助第三方监控工具实现对Kafka集群的长期监控和告警,快速发现性能瓶颈或异常:

  • JMX监控:通过jconsolejmc等工具连接Kafka Broker的JMX端口(默认9999),监控关键指标(如消息入队速率、消费延迟、分区Leader分布);
  • Prometheus+Grafana:通过kafka_exporter采集Kafka指标,用Grafana展示 dashboard(如Broker负载、Topic积压情况);
  • 商业工具:Confluent Control Center(提供全面的Kafka集群监控、管理和告警功能)。

9. 常见故障针对性排查

  • 消息发送慢:检查网络带宽、消息压缩配置(compression.type)、批量发送大小(batch.size)、分区数量(num.partitions)及磁盘IO性能;
  • 消息堆积:对比生产者生产速率与消费者消费速率,检查消费者组是否发生再平衡(kafka-consumer-groups.sh查看REBALANCE状态),确认消费者数量是否足够;
  • 消费者无法消费:检查消费者组配置(group.id)、订阅的主题是否存在(kafka-topics.sh --list),确认消费者是否正常启动(无ConsumerCoordinatorNotAvailableException错误)。

0