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 指标中找到证据。

相关推荐
2603_954708313 小时前
全维度容错设计,打造微电网安全运行屏障
服务器·网络·数据库·人工智能·分布式·安全
国服第二切图仔4 小时前
HarmonyOS APP《画伴梦工厂》开发第60篇-分布式软总线2.0——多设备协同新范式
分布式·wpf·harmonyos
952365 小时前
RabbitMQ-基础操作
java·spring boot·分布式·后端·spring·rabbitmq
worilb8 小时前
Spring Cloud 学习与实践(13):使用 Seata 解决分布式事务问题
分布式·学习·spring cloud
Devin~Y9 小时前
电商场景下的Java面试实战:从Spring Boot微服务到Kafka、Redis与AI RAG
java·spring boot·redis·elasticsearch·spring cloud·微服务·kafka
风若飞10 小时前
Tomcat 9.0.118 分布式 Redis Session 配置指南
redis·分布式·tomcat
六bring个六10 小时前
文件互传在传输层的操作分析
分布式·p2p·c/c++·open harmony
豆瓣鸡11 小时前
Leaf 分布式 ID 生成实战——美团 Leaf 从原理到落地
java·spring boot·分布式
AllData公司负责人11 小时前
数据同步平台|AIIData数据中台实现MySQL、Hive、Kafka 一键接入Doris
大数据·数据库·hive·mysql·kafka·实时同步
牛奶咖啡1311 小时前
大数据Hadoop运维应用实践——Hadoop大数据平台基础与架构(hadoop伪分布式的安装部署)
大数据·hadoop·分布式·hadoop是什么?有啥用?·hadoop的适用与不适用场景·hadoop伪分布式的安装部署·hadoop分布式存储操作