温馨提示×

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/hosts127.0.0.1 行绑定主机名;在 advertised.listeners 明确写为 PLAINTEXT://<本机IP>:9092,确保跨主机可解析。
    • Topic 副本数不合理:单 Broker 环境将 replication.factor=1;多 Broker 环境确保 replication.factor ≤ 可用 Broker 数,并检查 min.insync.replicas 与生产者 acks 的匹配。
  • 高延迟或吞吐上不去
    • 生产者:合理设置 acks=allretries、批量参数(如 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/ExceptionLeaderNotAvailableNotLeaderForPartitionZooKeeper session expired 等关键字,以定位配置、网络或副本问题。
  • 资源监控:用 htop / iotop 观察 CPU、内存与磁盘 I/O;网络侧用 ping / telnet 验证 9092/2181 的连通性与时延。
  • 客户端侧:在生产者/消费者侧打印发送/拉取时延与异常,配合重试与超时参数联动分析。
    通过日志与监控的结合,可快速判断是 Broker 配置、网络连通性还是业务处理链路导致的异常。

0