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

相关推荐
渔民小镇2 小时前
告别 if-else 地狱 —— JSR380 参数验证在 ionet 中的应用
java·服务器·分布式·游戏
智慧科技的海洋3 小时前
微电网智慧平台:破解能源困局的分布式能源革命
分布式·能源
深蓝轨迹3 小时前
Redisson 分布式锁复习总结
分布式
yashuk3 小时前
RabbitMQ高级特性----生产者确认机制
分布式·rabbitmq
kyle~3 小时前
DDS(Data Distribution Service)分布式实时数据分发标准
分布式·ros·dds
y = xⁿ4 小时前
重生之我创作出了小红书:计数模块 SDS 位图分片与偏移 异步发送
后端·kafka·intellij-idea
太阳之神aboluo4 小时前
RabbitMQ
java·分布式·spring·rabbitmq·java-rabbitmq
中议视控15 小时前
RTSP和RTSM编码推送软件让中控系统控制实现可视化播控
网络·分布式·物联网·5g·音视频
Thomas.Sir19 小时前
深入剖析 Redis 经典面试题
redis·分布式·高并发·