Skip to content

Kafka 监控与排障

Kafka 排障要先判断问题发生在 Producer、Broker、Consumer 还是下游系统。不要只看 Consumer Lag,Lag 是结果,不是根因。

核心监控对象

层级重点指标
Producer发送延迟、错误率、重试次数、缓冲区等待时间
Broker请求延迟、网络线程、IO 线程、磁盘、ISR、Controller
Topic / Partition写入速率、读取速率、分区倾斜、副本状态
ConsumerLag、消费速率、Poll 间隔、提交失败
系统CPU、内存、磁盘 IO、网络带宽、文件句柄

常用命令

查看 Topic 和 ISR

shell
kafka-topics.sh --bootstrap-server localhost:9092 \
  --describe --topic orders

重点看:

  • Leader
  • Replicas
  • Isr
  • 是否存在 Under-Replicated Partition

查看 Consumer Group

shell
kafka-consumer-groups.sh --bootstrap-server localhost:9092 \
  --describe --group order-service

重点看:

字段说明
CURRENT-OFFSET当前已提交 Offset
LOG-END-OFFSETPartition 最新 Offset
LAG两者差值
CONSUMER-ID当前消费实例
HOSTConsumer 所在主机

查看 KRaft 元数据

shell
kafka-metadata-quorum.sh --bootstrap-server localhost:9092 \
  --describe --status

重点看 Controller Quorum 是否稳定、Leader 是否频繁切换。

Consumer Lag 持续增长

LOG-END-OFFSET 增长速度 > CURRENT-OFFSET 增长速度

排查顺序:

  1. 写入量是否突然升高
  2. Consumer 实例是否减少或频繁 Rebalance
  3. Partition 数是否限制了消费并行度
  4. 单条消息处理是否变慢
  5. 下游数据库、HTTP 服务、缓存是否变慢
  6. Offset 是否提交失败

处理方式:

原因处理
写入峰值临时扩容 Consumer,必要时增加 Partition
处理慢优化业务逻辑、批量写下游、异步化
Partition 不足扩分区后按 Key 分布评估顺序性影响
Rebalance 频繁调整 max.poll.interval.ms、使用 Static Membership
下游慢限流、降级、队列隔离

Under-Replicated Partition

Under-Replicated 表示副本没有全部跟上 Leader。

常见原因:

  • Follower Broker 宕机
  • Broker 网络抖动
  • 磁盘 IO 慢
  • 副本拉取线程不足
  • 单 Broker 负载过高

排查:

shell
kafka-topics.sh --bootstrap-server localhost:9092 --describe \
  | grep -i 'Isr'

观察 ReplicasIsr 是否数量不一致。

处理:

  • 恢复故障 Broker
  • 检查磁盘空间和 IO Util
  • 检查 Broker 间网络
  • 适当增加 num.replica.fetchers
  • 重新分配热点 Partition

Producer 发送变慢

关注指标:

指标含义
request-latency-avg请求平均延迟
record-error-rate发送错误率
record-retry-rate重试速率
bufferpool-wait-ratio等待 Producer 缓冲区的比例
batch-size-avg平均批次大小

可能原因:

  • Broker 端请求处理慢
  • acks=all 下 ISR 同步慢
  • Producer 缓冲区太小
  • batch.size / linger.ms 不合理
  • 网络带宽不足
  • 单 Partition 热点

处理:

properties
buffer.memory=67108864
batch.size=131072
linger.ms=5
compression.type=lz4

如果是可靠性场景,不要为了降低延迟直接把 acksall 改成 1,应先确认 ISR、磁盘、网络和批量配置。

Broker 请求延迟高

Broker 端通常看请求延迟拆分:

阶段含义
Request Queue请求等待网络线程处理
Local TimeBroker 本地处理时间
Remote Time等待副本同步时间
Response Queue响应等待网络线程发送
Response Send响应发送耗时

判断:

  • Request Queue 高:网络线程不足或请求过多
  • Local Time 高:磁盘、页缓存、日志追加慢
  • Remote Time 高:Follower 同步慢,ISR 有问题
  • Response Queue 高:网络线程或网络带宽瓶颈

磁盘问题

Kafka 对磁盘非常敏感,常见问题包括:

  • 磁盘空间不足
  • 单盘热点
  • Page Cache 命中率下降
  • 保留策略过大导致清理不及时
  • 日志目录所在磁盘和系统盘混用

检查方向:

shell
df -h
iostat -x 1
lsof | wc -l

处理建议:

  • log.dirs 使用独立数据盘
  • 合理设置 log.retention.mslog.retention.bytes
  • 避免把超大保留周期和高写入 Topic 放在同一小磁盘
  • 对热点 Topic 做分区和副本再分配

Controller 异常

Controller 负责分区 Leader 选举和元数据管理。Controller 不稳定会导致:

  • Leader 频繁切换
  • Topic 创建/删除变慢
  • Broker 上下线影响扩大
  • KRaft Quorum 不稳定

排查:

shell
kafka-metadata-quorum.sh --bootstrap-server localhost:9092 \
  --describe --status

关注:

  • 当前 Leader 是否频繁变化
  • Controller 节点是否资源不足
  • Broker 间网络是否稳定
  • 元数据日志目录是否有磁盘问题

热点 Partition

现象:

  • 某个 Broker 流量明显高于其他 Broker
  • 某个 Partition 的写入量远高于其他 Partition
  • Consumer Group 中某个 Consumer Lag 明显更高

常见原因:

  • Key 分布不均
  • 所有消息使用固定 Key
  • Partition Leader 分布不均
  • 某个大客户或大租户集中到同一 Key

处理:

  • 优化 Key 设计,引入更均匀的分区键
  • 增加 Partition 后评估顺序性影响
  • 使用分区再分配工具迁移 Leader 和副本
  • 对大租户拆 Topic 或拆业务流

排障路径

问题现象

  ├── Producer 报错/发送慢?
  │     └── 看 ACK、重试、缓冲区、Broker 请求延迟

  ├── Consumer Lag 高?
  │     └── 看消费速率、Rebalance、下游处理、Partition 并行度

  ├── ISR 不完整?
  │     └── 看 Broker 存活、网络、磁盘、Follower 拉取

  └── 集群元数据异常?
        └── 看 Controller、KRaft Quorum、Broker 日志

参考