Kafka JMX详解

Kafka 的 JMX(Java Management Extensions) 是 Kafka 监控、性能分析、容量规划、故障排查 的核心机制之一。几乎所有 Kafka 监控系统(Prometheus / Grafana / Datadog / Zabbix)底层都依赖 JMX 指标。

下面我从 架构 → 启用 → 指标体系 → 核心 MBean → 实战监控 → 优化指标 → 常见问题 全面系统讲解。


一、什么是 Kafka JMX

1️⃣ JMX 本质

JMX 是 Java 提供的:

运行时管理与监控接口标准

允许外部程序读取 JVM 内部对象的状态。

Kafka 是 Java 程序,因此:

复制代码
Kafka Broker
   ↓
JVM
   ↓
JMX MBean
   ↓
监控系统读取

2️⃣ Kafka JMX 的作用

Kafka 所有关键指标都来自 JMX,例如:

类型 示例
Broker性能 TPS、延迟
Topic吞吐 BytesIn/Out
Producer状态 请求速率
Consumer Lag 延迟消费
副本同步 ISR 状态
JVM GC、内存

二、Kafka JMX 架构

Kafka 指标结构

Kafka 使用:

复制代码
Domain + Type + Name + Tags

格式:

复制代码
kafka.<domain>:type=<Type>,name=<Metric>,<tag>=<value>

示例:

复制代码
kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec

含义:

部分 说明
kafka.server 模块
BrokerTopicMetrics 指标分类
BytesInPerSec 指标名

三、如何开启 Kafka JMX(重点)

Kafka 默认支持 JMX,只需暴露端口。


方式1(推荐):环境变量启动

编辑:

复制代码
bin/kafka-server-start.sh

添加:

复制代码
export JMX_PORT=9999
export KAFKA_JMX_OPTS="
 -Dcom.sun.management.jmxremote
 -Dcom.sun.management.jmxremote.authenticate=false
 -Dcom.sun.management.jmxremote.ssl=false
"

启动:

复制代码
bin/kafka-server-start.sh config/server.properties

验证

复制代码
netstat -lntp | grep 9999

看到:

复制代码
LISTEN 0 0 :::9999

说明成功。


四、Kafka JMX 指标分类(核心)

Kafka JMX 可以分为 6 大类


1️⃣ Broker 指标(最重要)

Domain

复制代码
kafka.server

🔥 吞吐指标

复制代码
kafka.server:type=BrokerTopicMetrics
指标 含义
BytesInPerSec 写入流量
BytesOutPerSec 读取流量
MessagesInPerSec 消息TPS

👉 判断 Kafka 是否过载核心指标。


示例

复制代码
kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec

属性:

复制代码
Count
MeanRate
OneMinuteRate
FiveMinuteRate

2️⃣ Request 请求指标(极其重要)

复制代码
kafka.network:type=RequestMetrics

请求延迟(关键)

复制代码
TotalTimeMs

代表:

复制代码
网络 + 队列 + 磁盘 + 处理

Kafka 延迟 = 这里。


核心请求类型:

请求 含义
Produce 写入
FetchConsumer 消费
FetchFollower 副本同步

示例:

复制代码
kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Produce

3️⃣ 副本同步指标(ISR健康度)

复制代码
kafka.server:type=ReplicaManager

关键指标:

指标 含义
UnderReplicatedPartitions ISR异常数量
OfflinePartitionsCount 离线分区

🔥 生产环境必须监控:

复制代码
UnderReplicatedPartitions > 0 = 故障

4️⃣ Controller 指标

复制代码
kafka.controller

关键:

指标 含义
ActiveControllerCount 当前controller数量

必须:

复制代码
= 1

否则集群异常。


5️⃣ Log & 磁盘指标

复制代码
kafka.log

关注:

指标 含义
LogFlushRateAndTimeMs flush延迟
LogFlushStats IO压力

6️⃣ JVM 指标(很多人忽略)

复制代码
java.lang

例如:

指标 含义
HeapMemoryUsage 堆使用
GarbageCollector GC时间
ThreadCount 线程数

Kafka 性能问题 80% 来自 JVM


五、最关键的 Kafka JMX 指标(生产必看)

下面是实战中真正需要监控的:

分类 指标 作用
吞吐 BytesInPerSec 写压力
吞吐 BytesOutPerSec 读压力
TPS MessagesInPerSec 消息速率
延迟 TotalTimeMs Kafka延迟
ISR UnderReplicatedPartitions 副本健康
Controller ActiveControllerCount 集群稳定
Queue RequestQueueSize 是否堵塞
IO LogFlushTimeMs 磁盘瓶颈
JVM GC Time Stop-the-world

六、如何读取 Kafka JMX

方法1:jconsole(官方)

复制代码
jconsole <ip>:9999

可直接浏览 MBean。


方法2:jmxterm(推荐)

复制代码
java -jar jmxterm.jar

连接:

复制代码
open host:9999

查看:

复制代码
beans

方法3(生产推荐):Prometheus

架构:

复制代码
Kafka
  ↓ JMX
JMX Exporter
  ↓
Prometheus
  ↓
Grafana

启动 exporter:

复制代码
java -javaagent:jmx_prometheus_javaagent.jar=7071:config.yml

Prometheus 采集:

复制代码
http://broker:7071/metrics

七、Kafka JMX 与性能优化关系(重点)

JMX = Kafka 调优依据。


1️⃣ 判断 Broker 是否瓶颈

看:

复制代码
BytesInPerSec ↑
TotalTimeMs ↑

说明:

复制代码
磁盘 or 网络瓶颈

2️⃣ 判断线程不足

看:

复制代码
RequestQueueSize

持续增长:

复制代码
num.network.threads 太小

3️⃣ 判断磁盘问题

看:

复制代码
LogFlushTimeMs ↑

说明:

复制代码
IO wait 高

4️⃣ 判断 Consumer 慢

看:

复制代码
BytesOutPerSec 低
Lag 高

八、JMX 指标命名规律(记住这个)

Kafka 指标基本遵循:

复制代码
PerSec → 速率
Ms → 延迟
Count → 总次数
Rate → 平均速率
Queue → 队列长度

九、生产环境最佳实践(经验总结)

✅ 必须做:

  1. 禁止公网暴露 JMX

  2. 使用 exporter 转 HTTP

  3. Grafana 建仪表盘

  4. 设置告警


推荐告警:

指标 阈值
UnderReplicatedPartitions >0
ActiveControllerCount ≠1
Produce TotalTimeMs >100ms
GC Time 持续升高

十、很多人不知道的高级知识(⭐)

Kafka Metrics 实际基于:

复制代码
Dropwizard Metrics

因此:

复制代码
MeanRate
1mRate
5mRate
15mRate

类似 Linux load average。


十一、Kafka JMX 总体认知图

复制代码
                Kafka Broker
                      │
                JVM Metrics
                      │
                   JMX MBeans
                      │
        ┌─────────────┼─────────────┐
   Broker        Network        Replica
                      │
                JMX Exporter
                      │
                 Prometheus
                      │
                   Grafana

✅ 一句话总结

Kafka JMX = Kafka 的"操作系统 /proc"

所有性能问题最终都能在 JMX 指标中找到证据。

相关推荐
与遨游于天地1 小时前
分布式锁从Redis到Redisson的演进
数据库·redis·分布式
Francek Chen4 小时前
【大数据存储与管理】实验3:熟悉常用的HBase操作
大数据·数据库·分布式·hbase
七夜zippoe5 小时前
DolphinDB分布式表:创建与管理
数据库·分布式·维度·dolphindb·数据写入
KmSH8umpK5 小时前
Redis分布式锁进阶第十七篇
数据库·redis·分布式
fengxin_rou5 小时前
JVM 内存结构与内存溢出 / 泄漏问题全解析
java·开发语言·jvm·分布式·rabbitmq
gQ85v10Db19 小时前
Redis分布式锁进阶第十七篇:微服务分布式锁全局治理 + 跨团队统一规范落地 + 全链路稳定性提升方案
redis·分布式·微服务
gQ85v10Db1 天前
Redis分布式锁进阶第十八篇:本地缓存+分布式锁双锁架构 + 高并发削峰兜底 + 极致性能无损优化实战
redis·分布式·缓存
小江的记录本1 天前
【Kafka核心】Kafka高性能的四大核心支柱:零拷贝、批量发送、页缓存、压缩
java·数据库·分布式·后端·缓存·kafka·rabbitmq
gQ85v10Db1 天前
Redis分布式锁进阶第十四篇:全系列终局架构复盘 + 锁体系统一规范 + 线上全年零事故收官方案
redis·分布式·架构
KmSH8umpK1 天前
Redis分布式锁进阶第十二篇
数据库·redis·分布式