温馨提示×

kafka ubuntu故障怎么排查

小樊
43
2026-01-01 22:30:29
栏目: 智能运维

Ubuntu 上 Kafka 故障排查与修复手册

一 快速定位流程

  • 检查服务状态与端口
    • systemd:执行 systemctl status kafkasystemctl status zookeeper;查看是否 Active。
    • 端口:执行 ss -lntp | grep -E ‘:(2181|9092)’lsof -i:9092 确认监听与占用。
  • 查看日志定位异常
    • Kafka 服务日志:在 server.propertieslog.dirs 指定目录(常见如 /var/log/kafka 或安装目录下的 logs),用 tail -f 实时查看错误关键词(如 Exception、ERROR、OutOfMemoryError)。
    • 系统日志:执行 journalctl -u kafka -u zookeeper -f 查看启动失败、OOM、权限等线索。
  • 基础连通与功能自检
    • 本地连通:执行 telnet 127.0.0.1 9092nc -vz 127.0.0.1 9092
    • 远程连通:从客户端执行 nc -vz <broker_ip> 9092;云服务器需确认安全组/防火墙放行 9092/2181
    • 功能自检:用自带脚本进行生产消费验证(见下文命令)。
  • 资源与依赖检查
    • 资源:free -mdf -hiostat -x 1htop 检查内存、磁盘、IO、CPU。
    • Java:java -version,确认与 Kafka 版本兼容(常见为 OpenJDK 8)。

二 常见故障与修复对照表

症状 快速检查 修复建议
服务起不来 systemctl status、journalctl、端口占用 释放端口(kill 占用进程)、修正配置路径/权限、检查内存 OOM 并调整 KAFKA_HEAP_OPTS
端口被占用(9092/2181) ss/lsof 查占用 kill 冲突进程或调整 listeners/port 配置
无法远程连接 本机 telnet 成功、外机失败 开放防火墙 ufw allow 9092,2181;核对 listenersadvertised.listeners;云上放通安全组
生产者/消费者报错 控制台生产消费失败 核对 bootstrap.servers、Topic 存在、分区与权限;Zookeeper/KRaft 状态正常
磁盘写满/日志过大 df -h、du -sh 数据目录 调整 log.retention.hours/bytes、启用压缩;配置 logrotate 轮转
高延迟/吞吐低 iostat/htop、网络 ping/丢包 优化分区数与副本、调优批量/压缩/缓存;排查网络抖动与 GC
版本/内存不兼容 java -version、启动 OOM 使用 OpenJDK 8;降低 -Xmx/-Xms 或扩容内存
Zookeeper 不一致 zkCli.sh ls /brokers/ids 检查 ZK 集群健康、myid/配置一致,必要时重启异常节点
KRaft 模式下无法启动 元数据不一致 核对 process.rolesnode.idcontroller.quorum.voters 一致性与目录权限
以上对照基于 Ubuntu 上 Kafka 的常见问题场景与处置要点整理。

三 关键配置与命令清单

  • 配置文件要点
    • server.propertiesbroker.id(集群唯一)、listeners/advertised.listeners(内外网可达)、log.dirs(数据目录)、zookeeper.connect(Zookeeper 模式)、process.roles/node.id/controller.quorum.voters(KRaft 模式)、log.retention.hourslog.retention.bytesnum.partitionsdefault.replication.factormin.insync.replicasunclean.leader.election.enable
    • 内存:在 kafka-server-start.sh 中设置 KAFKA_HEAP_OPTS=“-Xmx512M -Xms512M”(按机器内存调整)。
  • 常用命令
    • 服务管理:systemctl start/stop/restart kafka;systemctl enable kafka(开机自启)。
    • 自检生产消费:
      • 创建主题:bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
      • 生产消息:bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
      • 消费消息:bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
    • 元数据查看:bin/kafka-topics.sh --list --bootstrap-server localhost:9092;bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092
    • Zookeeper 检查(Zookeeper 模式):echo “ls /brokers/ids” | zkCli.sh。

四 监控与日志管理

  • 系统与服务日志
    • 实时查看:journalctl -u kafka -f;tail -f server.logcontroller.log(KRaft)。
    • 轮转与保留:配置 logrotate 管理 Kafka 日志文件(按日轮转、压缩、保留 7 天等),避免磁盘被撑满。
  • 指标与可视化
    • JMX 暴露指标,结合 JConsole/VisualVMPrometheus + Grafana 搭建监控大盘,关注请求耗时、错误率、请求排队、网络与 IO。
  • 容量与性能
    • 设置合理的 retentionsegment.bytes,对热点分区进行再均衡;按需调整批量大小、压缩与缓存参数。

五 最小可行修复示例

  • 端口冲突导致无法启动
    • 查占用:ss -lntp | grep 9092 或 lsof -i:9092
    • 处置:kill 或修改 server.propertiesport,再重启:systemctl restart kafka
  • 远程连不通
    • 放行端口:sudo ufw allow 9092,2181
    • 核对监听与对外地址:确保 listeners=PLAINTEXT://0.0.0.0:9092advertised.listeners=PLAINTEXT://<服务器公网或内网IP>:9092
  • 磁盘满导致写入失败
    • 清理或扩容:df -h;du -sh /var/log/kafka
    • 调整保留:在 server.properties 设置 log.retention.hours=72log.retention.bytes=10737418240;配置 logrotate 定期轮转
  • 内存不足启动失败
    • 编辑 kafka-server-start.sh:export KAFKA_HEAP_OPTS=“-Xmx512M -Xms512M”
    • 重启服务:systemctl restart kafka
  • 基本连通自检
    • 本地:nc -vz 127.0.0.1 9092
    • 远程:nc -vz <broker_ip> 9092;若失败,复核防火墙/安全组与 advertised.listeners

0