10.6.1 性能指标与瓶颈定位

性能指标与瓶颈定位是 Kafka 性能优化的基础,需要建立端到端可观测体系,从客户端、Broker、OS 与硬件多维度综合判断。

一、原理草图:端到端指标链路

文章图片

二、关键性能指标体系(含示例)
- 吞吐指标:生产与消费 TPS、MB/s;分主题/分分区统计,关注高峰与长尾。
- 延迟指标:生产端发送延迟、批次等待时间、消费者端处理延迟;观察 P50/P95/P99。
- 积压指标:消费滞后(Lag)、每分区 Lag 分布,定位“拖尾分区”。
- 资源指标:CPU、内存、磁盘 I/O、网络吞吐与丢包、页缓存命中率。
- 稳定性指标:ISR 变化、Leader 迁移频次、请求超时、重试率与错误码分布。

三、安装与启用指标采集(JMX Exporter 示例)

以 Kafka 3.x 为例,导出 Broker 指标用于 Prometheus/本地排查。

# 1) 下载 JMX Exporter
mkdir -p /opt/jmx_exporter
cd /opt/jmx_exporter
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.20.0/jmx_prometheus_javaagent-0.20.0.jar

# 2) 编写 Kafka JMX 配置
cat >/opt/jmx_exporter/kafka.yml <<'EOF'
lowercaseOutputName: true
rules:
  - pattern: 'kafka.server<type=(.+), name=(.+)><>Value'
    name: kafka_server_$1_$2
EOF

# 3) 在 Kafka 启动脚本中加入(示例路径)
export KAFKA_OPTS="-javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent-0.20.0.jar=7071:/opt/jmx_exporter/kafka.yml"
# 预期效果:在 7071 端口暴露 /metrics

四、关键命令与结果解读(完整示例)
1) 消费滞后与分区拖尾

# 查看指定消费组的滞后
/opt/kafka/bin/kafka-consumer-groups.sh \
  --bootstrap-server 10.0.0.11:9092 \
  --group order_cg --describe

# 预期输出关键字段:
# TOPIC  PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG  CONSUMER-ID
# lag 高且集中在少数分区 => 分区热点或消费者不足

2) 分区与 Leader 分布不均衡

# 查看主题分区详情
/opt/kafka/bin/kafka-topics.sh \
  --bootstrap-server 10.0.0.11:9092 \
  --describe --topic order_topic

# 预期:各分区 Leader 分布均匀;若 Leader 过度集中 => 迁移或重分配

3) 磁盘与网络瓶颈排查

# 磁盘 I/O 观察
iostat -dx 1 5

# 网络吞吐/丢包
sar -n DEV 1 5
ping -c 5 10.0.0.11

# 预期解释:
# %util 接近 100% 且 await 持续上升 => 磁盘瓶颈
# rx/tx saturation 或丢包升高 => 网络瓶颈

4) Broker 级关键指标(JMX 端点拉取)

# 拉取 metrics,观察写入/请求队列
curl -s http://10.0.0.11:7071/metrics | \
  egrep 'kafka_server_replicamanager_underreplicatedpartitions|kafka_network_requestmetrics_requestspersec'

# 预期:
# underreplicatedpartitions > 0 => ISR 抖动,检查网络/磁盘

五、性能瓶颈定位流程(可执行)
1. 确认负载基线:对比历史峰值与当前吞吐。
2. 客户端指标:发送失败/重试、batch/linger 配置是否异常。
3. Broker 指标:请求队列堆积、磁盘 I/O 与网络是否饱和。
4. 分区/副本状态:Leader 分布、分区倾斜、ISR 缩减。
5. 基础设施校验:硬件规格、磁盘类型、网卡带宽与系统参数。

六、常见瓶颈与特征(含排错建议)
- 磁盘瓶颈:写入延迟升高、%util 接近 100%
排错:检查磁盘类型、落盘目录是否混用、是否与 OS 共享盘。
- 网络瓶颈:带宽打满、RTT 增大
排错:检查跨机房链路、网卡队列/中断、MTU 一致性。
- CPU 瓶颈:压缩/解压耗尽、请求排队
排错:降低压缩级别或扩容;检查 GC 频率。
- 分区不足/不均衡:单分区 TPS 上限触顶
排错:增加分区或重新分配分区。
- ISR 抖动:副本频繁进出
排错:检查网络/磁盘抖动,必要时提高 min.insync.replicas。

七、诊断输出模板
- 瓶颈结论:磁盘/网络/CPU/分区设计/客户端参数
- 影响范围:主题、分区、Broker
- 量化目标:吞吐提升、延迟下降、Lag 回收速率

八、练习
1) 使用 kafka-consumer-groups.sh 找出 Lag 最大的主题与分区,并解释原因。
2) 使用 iostat -dx 识别磁盘瓶颈并截图记录 %utilawait
3) 拉取 JMX 指标,判断是否存在 ISR 抖动,给出处理方案。