Kafka故障排查Ubuntu上怎么办
小樊
31
2025-12-25 03:42:23
Ubuntu上Kafka故障排查清单
一 快速定位流程
- 检查服务状态与日志:确认进程是否存活、是否反复重启,优先查看 /var/log/kafka/server.log 或安装目录下的 logs/server.log 中的异常堆栈与错误提示。
- 校验关键配置:核对 server.properties 中的 broker.id(唯一)、listeners / advertised.listeners(对外可达地址)、zookeeper.connect(或 KRaft 的 process.roles 与 controller.quorum.voters)、log.dirs(磁盘可写且空间充足)。
- 网络连通性:在客户端与 Broker 上双向测试到 9092(Broker 监听端口)与 2181(ZooKeeper 端口)的连通性,必要时排查云安全组/本机防火墙。
- 资源与依赖:检查 CPU/内存/磁盘 I/O,确认 JDK 版本兼容 与 文件描述符限制 足够。
- 最小闭环验证:用自带的 CLI 创建 Topic、发送/消费消息,快速判断是配置、网络还是业务侧问题。
以上步骤覆盖了 Ubuntu 上最常见的 Kafka 故障面,可先行执行以缩小问题范围。
二 常见故障与修复要点
- 无法启动或反复重启
- 配置错误:重点核对 listeners / advertised.listeners / zookeeper.connect 的语法与可达性;配置文件避免全角符号、BOM 或隐藏字符。
- 端口冲突:检查 9092/2181 是否被占用(如 netstat/ss),必要时更换端口或释放占用进程。
- 资源不足:JVM 堆过小或系统内存紧张,调整 KAFKA_HEAP_OPTS(如 -Xmx2G -Xms2G);检查磁盘剩余空间。
- 文件描述符限制:提升 ulimit -n(如 65536),并在 systemd 服务中设置 LimitNOFILE。
- 权限问题:确保 log.dirs 与配置/日志目录归属 kafka 用户且权限正确。
- 客户端报 LEADER_NOT_AVAILABLE 或无法生产/消费
- 主机名解析不一致:避免在 /etc/hosts 的 127.0.0.1 行绑定主机名;在 advertised.listeners 明确写为 PLAINTEXT://<本机IP>:9092,确保跨主机可解析。
- Topic 副本数不合理:单 Broker 环境将 replication.factor=1;多 Broker 环境确保 replication.factor ≤ 可用 Broker 数,并检查 min.insync.replicas 与生产者 acks 的匹配。
- 高延迟或吞吐上不去
- 生产者:合理设置 acks=all、retries、批量参数(如 batch.size / linger.ms),避免同步阻塞。
- 消费者:提高并发度(增加分区数)、优化处理逻辑,避免单条消息耗时过长导致 poll 超时。
- 系统侧:用 ping / iotop / htop 排查网络抖动与磁盘/CPU 瓶颈。
- 消息堆积
- 增加分区数提升并行度,优化消费者代码(异步/批量),必要时调整分区分配策略(如 RoundRobinAssignor)。
- 磁盘写满
- 调整 log.retention.hours / log.retention.bytes 清理过期日志,或临时扩容磁盘。
- ZooKeeper 会话过期 / 集群抖动
- 适度增大 zookeeper.session.timeout.ms,并分离 ZooKeeper 与 Kafka 的物理资源,降低抖动。
以上要点覆盖了 Ubuntu 上 Kafka 的高频故障场景与对应处置路径。
三 关键配置与命令示例
- 配置核对(server.properties 片段)
- 唯一标识:broker.id=<唯一整数>
- 监听与对外地址:listeners=PLAINTEXT://0.0.0.0:9092;advertised.listeners=PLAINTEXT://<服务器IP>:9092
- 存储路径:log.dirs=/var/lib/kafka/data(确保目录存在且可写)
- 依赖地址:zookeeper.connect=localhost:2181(KRaft 模式则配置 process.roles / controller.quorum.voters / log.dirs 等)
- 最小闭环验证(CLI)
- 创建 Topic:bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
- 查看 Topic:bin/kafka-topics.sh --list --bootstrap-server localhost:9092
- 生产消息:bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
- 消费消息:bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
- 资源与权限
- 文件描述符:编辑 /etc/security/limits.d/99-nofile.conf 设置 nofile=65536,并在 systemd 服务中设置 LimitNOFILE=65536;重启会话/服务生效。
- 防火墙:开放端口(如 sudo ufw allow 9092,2181)。
- JVM 堆:在 kafka-server-start.sh 中设置 KAFKA_HEAP_OPTS=“-Xmx2G -Xms2G”。
以上配置与命令可直接用于 Ubuntu 环境的快速自检与恢复。
四 日志与监控建议
- 日志优先:持续 tail server.log,关注 ERROR/Exception、LeaderNotAvailable、NotLeaderForPartition、ZooKeeper session expired 等关键字,以定位配置、网络或副本问题。
- 资源监控:用 htop / iotop 观察 CPU、内存与磁盘 I/O;网络侧用 ping / telnet 验证 9092/2181 的连通性与时延。
- 客户端侧:在生产者/消费者侧打印发送/拉取时延与异常,配合重试与超时参数联动分析。
通过日志与监控的结合,可快速判断是 Broker 配置、网络连通性还是业务处理链路导致的异常。