温馨提示×

kafka故障排查ubuntu怎么办

小樊
44
2025-12-29 00:47:25
栏目: 智能运维

Ubuntu 上 Kafka 故障排查实操手册

一 快速定位流程

  • 检查服务状态:确认 KafkaZookeeper 是否运行,必要时启动并设为开机自启。
    命令示例:
    sudo systemctl status kafka
    sudo systemctl start kafka
    sudo systemctl enable kafka
    sudo systemctl status zookeeper
  • 查看日志:优先看 /var/log/kafka/server.log 的错误堆栈与告警。
    命令示例:tail -500f /var/log/kafka/server.log
  • 校验关键配置:核对 server.properties 中的 listenersadvertised.listenerszookeeper.connectlog.dirs 等。
    命令示例:cat /etc/kafka/server.properties | grep -E “listeners|advertised.listeners|zookeeper.connect|log.dirs”
  • 网络连通性:Broker 之间、Broker 与客户端需可达,重点测试 90922181
    命令示例:ping <broker_ip>;nc -zv <broker_ip> 9092;nc -zv <zk_ip> 2181
  • 资源与磁盘:检查 CPU/内存/磁盘空间/IO,磁盘建议保留 ≥20% 余量。
    命令示例:top/htop;free -h;df -h;iostat -x 1 10
  • 快速连通性验证:用 Kafka 自带工具或 kafkacat 做一次端到端生产/消费测试,确认基本功能是否正常。

二 常见故障与修复要点

现象 可能原因 快速修复
服务起不来 配置错误、目录无权限、端口被占用 核对 server.properties;chown/chmod 数据目录;用 netstat -tulpen
无法远程生产/消费 advertised.listeners 配置不当、防火墙/安全组阻断 将 advertised.listeners 设为客户端可达地址;开放 9092;用 nc 验证连通
Zookeeper 会话过期/Controller 抖动 ZK 压力大、会话超时过短 分离 ZK 与 Kafka 资源;适当增大 zookeeper.session.timeout.ms
消息堆积 消费者性能不足、分区数不够、频繁再均衡 优化消费逻辑/并发;增加分区;减少再均衡(见下)
数据丢失 acks/副本策略不当、Leader 切换 生产者 acks=all、retries>0;Broker min.insync.replicas≥2
消费者重复消费 未提交 offset、自动提交间隔过长 处理完成后同步提交;或缩短 auto.commit.interval.ms
发送超时/超时异常 网络差、请求处理慢、消息过大 增大 request.timeout.ms;启用压缩;合理调大 batch.size/linger.ms
磁盘写满 保留策略过长、日志过大 缩短 log.retention.hours;必要时用 kafka-delete-records.sh 清理指定区间

三 关键配置与优化建议

  • listeners 与 advertised.listeners:
    listeners 指定 Broker 监听地址(如 PLAINTEXT://0.0.0.0:9092),advertised.listeners 必须填客户端可直连的 IP/域名,否则会出现能发不能收或连接被拒。
  • 可靠性写入:
    生产者设置 acks=all、合理 retries;Broker 设置 min.insync.replicas=2(至少 2 个 ISR 确认才允许写入),显著降低数据丢失风险。
  • 消费端稳定性:
    避免单次处理过久触发再均衡,适当增大 session.timeout.ms(如 30000)与 max.poll.interval.ms(如 300000);处理完再提交 offset,或缩短 auto.commit.interval.ms
  • 性能与吞吐:
    启用压缩(如 compression.type=gzip/snappy),适度增大 batch.size(如 32768)与 linger.ms(如 10),提升批量发送效率;分区数需与并发消费者匹配。
  • 磁盘与保留:
    监控 iostat 的 await/使用率;设置 log.retention.hours(如 72)与 log.retention.bytes(如 1GB)避免无限增长。

四 常用命令清单

  • 服务与日志:
    sudo systemctl status|start|enable kafka
    tail -500f /var/log/kafka/server.log
  • 配置核查:
    cat /etc/kafka/server.properties | grep -E “listeners|advertised.listeners|zookeeper.connect|log.dirs”
  • 连通性测试:
    ping ;nc -zv 9092;nc -zv 2181
  • Topic/生产消费/消费组:
    kafka-topics.sh --bootstrap-server broker:9092 --list
    kafka-topics.sh --bootstrap-server broker:9092 --describe --topic
    kafka-console-producer.sh --broker-list broker:9092 --topic
    kafka-console-consumer.sh --bootstrap-server broker:9092 --topic --from-beginning
    kafka-consumer-groups.sh --describe --group --bootstrap-server broker:9092
  • Zookeeper 检查:
    sudo systemctl status zookeeper
    tail -500f /var/log/zookeeper/zookeeper.log
    zkCli.sh -server zk:2181;ls /brokers/ids
  • 第三方连通性工具:
    kafkacat -L -b broker:9092;kafkacat -C -b broker:9092 -t -o -10

五 监控与进一步诊断

  • JMX:通过 jconsole/jmc 连接 Broker 的 JMX 9999 端口,观察请求耗时、请求队列、分区 Leader 分布、UnderReplicatedPartitions 等关键指标。
  • Prometheus + Grafana:部署 kafka_exporter 采集指标,构建监控大盘,关注生产/消费速率、请求延迟、分区与副本健康、消费滞后(Lag)。
  • 日志与事件:持续 tail server.logzookeeper.log,对 ERROR/WARN 与异常堆栈建立告警规则,结合监控定位根因。

0