监控Kafka的关键指标
Kafka 架构

上面绿色部分 PRODUCER(生产者)和下面紫色部分 CONSUMER(消费者)是业务程序,通常由研发人员埋点解决监控问题,如果是 Java 客户端也会暴露 JMX 指标。组件运维监控层面着重关注蓝色部分的 BROKER(Kafka 节点)和红色部分的 ZOOKEEPER。
ZooKeeper 也是 Java 语言写的,监控相对简单,另外 ZooKeeper 支持 mntr 四字命令,可以获取 ZooKeeper 内部健康状况。新版 ZooKeeper 连四字命令都不需要了,直接内置暴露了 Prometheus 协议的 metrics 接口,直接抓取即可。
重点关注 Broker 节点的监控,也就是 Kafka 自身的监控,通常从四个方面着手。
- Kafka 进程所在机器的监控,重点关注 CPU、硬盘 I/O、网络 I/O。
- JVM 监控,Kafka 是个 Java 进程,所以需要常规的 JVM 监控,通过 JMX 方式暴露。
- Kafka 自身的指标、也是通过 JMX 方式暴露,比如消息数量、流量、分区、副本的数量等。
- 各个 consumer 的 lag 监控,即消息堆积量,是各类 MQ 都应该监控的指标。
JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。Java 程序接入 JMX 框架之后,可以把一些类的属性和方法暴露出来,用户就可以使用 JMX 相关工具来读取或操作这些类。
Kafka 的配置文件在 config 目录,各种脚本在 bin 目录,要让 Kafka 开启 JMX,肯定是要修改某个配置项或者调整某个脚本的,具体调整哪里呢?我们在 Kafka 的部署目录搜索一下看看。
grep -i jmx -r config
grep -i jmx -r bin
JMX 数据分两类,一类是和 JVM 相关的,一类是和 Kafka 相关的。
ThreadCount 表示 JVM 里的线程数,类似的还有 DaemonThreadCount,表示后台线程数,PeakThreadCount 表示历史峰值线程数。JVM 要重点关注 GC 的情况和内存的情况。
GC 主要看次数和时间,分为 YongGC 和 FullGC,YongGC 很正常,频率也比较高,FullGC 正常情况下很少发生,如果经常发生,FullGC 程序的性能就会受影响。GC 次数的指标是 kafka_java_garbage_collector_CollectionCount,是一个 Counter 类型单调递增的值。GC 时间的指标是 kafka_java_garbage_collector_CollectionTime,也是一个 Counter 类型单调递增的值。
内存的指标是 kafka_java_memory_pool_Usage_used,单位是 byte。有个 name 标签标识了具体是哪个区域的内存大小,比如 Eden 区、Survivor 区、Old 区。
Kafka 指标
- 活跃控制器数量:MBean:broker kafka.controller:type=KafkaController,name=ActiveControllerCount。一个 Kafka 集群有多个 Broker,正常来讲其中一个 Broker 会是活跃控制器,且只能有一个。从整个集群角度来看,SUM 所有 Broker 的这个指标,结果应该为 1。如果
- 非同步分区数量:MBean:kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions。这个指标是对每个 Topic 的每个分区的统计,如果某个分区主从同步出现问题,对应的数值就会大于 0。
- 离线分区数量:MBean:kafka.controller:type=KafkaController,name=OfflinePartitionsCount。这个指标只有集群控制器才有,其他 Broker 这个指标的值是 0,表示集群里没有 leader 的分区数量。
- 离线日志目录数量:MBean:kafka.log:type=LogManager,name=OfflineLogDirectoryCount。Kafka 是把收到的消息存入 log 目录,如果 log 目录有问题,比如写满了,就会被置为 Offline,及时监控离线日志目录的数量显然非常有必要。
- 流入流出字节和流入消息:这是典型的吞吐指标,既有 Broker 粒度的,也有 Topic 粒度的,名字都一样,Topic 粒度的指标数据 MBean ObjectName 会多一个 topic=xx 的后缀。
- 流入字节:MBean:kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec。这个指标 Kafka 在使用 Yammer Metrics 埋点的时候,设置为了 Meter 类型,所以 Yammer 会自动计算出 Count、OneMinuteRate、FiveMinuteRate、FifteenMinuteRate、MeanRate 等指标,也就是 1 分钟、5 分钟、15 分钟内的平均流入速率,以及整体平均流入速率。
- 流出字节:MBean:kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec。和 BytesInPerSec 类似,表示出向流量。不过需要注意的是,流出字节除了普通消费者的消费流量,也包含了副本同步流量。
- 流入消息:MBean:kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSecBytesInPerSec 和 BytesOutPerSec 都是以 byte 为单位统计的,而 MessagesInPerSec 是以消息个数为单位统计的,也是 Meter 类型,相关属性都一样。
- 分区数量:MBean:kafka.server:type=ReplicaManager,name=PartitionCount这个指标表示某个 Broker 上面总共有多少个分区,包括 leader 分区和 follower 分区。如果多个 Broker 分区不均衡,可能会造成有些 Broker 消耗硬盘空间过快,这是需要注意的。
- leader 分区数量:MBean:kafka.server:type=ReplicaManager,name=LeaderCount这个指标表示某个 Broker 上面总共有多少个 leader 分区,leader 分区负责数据读写,承接流量,所以 leader 分区如果不均衡,会导致某些 Broker 过分繁忙而另一些 Broker 过分空闲,这种情况也是需要我们注意的。

此文章为8月Day8学习笔记,内容来源于极客时间《运维监控系统实战笔记》,推荐该课程。
相关文章:
监控Kafka的关键指标
Kafka 架构 上面绿色部分 PRODUCER(生产者)和下面紫色部分 CONSUMER(消费者)是业务程序,通常由研发人员埋点解决监控问题,如果是 Java 客户端也会暴露 JMX 指标。组件运维监控层面着重关注蓝色部分的 BROKE…...
React18 hook学习笔记
useState useState用于在函数组件中声明和管理状态 它接受初始状态,并返回一个状态变量和一个更新状态的函数 通过调用更新状态的函数,可以改变状态的值并触发组件的重新渲染 import { useState } from "react"function App() {const [obj, …...
Java038——正则表达式
一、认识正则表达式 正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。例如,“\d”表示数字 0~9 中的任何一个,“d”就…...
JavaScript元素选择器
目录 一、getElementsByTagName1.说明2.用法示例 二、getElementsByName1.说明2.用法示例 三、getElementById1.说明2.用法示例 四、getElementsByClassName1.说明2.用法示例 五、querySelector1.说明2.用法示例 六、querySelectorAll1.说明2.用法示例 七、综合示例 一、getEle…...
Docker安装 elasticsearch-head
目录 前言安装elasticsearch-head步骤1:准备1. 安装docker2. 搜索可以使用的镜像。3. 也可从docker hub上搜索镜像。4. 选择合适的redis镜像。 步骤2:拉取elasticsearch-head镜像拉取镜像查看已拉取的镜像 步骤3:创建容器创建容器方式1&#…...
交换排序——选择排序和冒泡排序的区别是什么?
今天重温一下算法,其实刚开始我觉得冒泡排序和选择排序是一样的,因为他们排序过程中都是通过相邻的数据比较找到最小/最大的数据,通过不断思考和学习才明白,两者还是有区别的。 冒泡排序 概念 冒泡排序(Bubble Sort)࿰…...
吉他谱:Melodies of Life - Final Fantasy Solo Guitar Collections
原始出处: Final Fantasy Solo Guitar Collections - 南泽大介改编的最终幻想9主题曲吉他谱 更多吉他谱: https://github.com/NaisuXu/Guitar_Sheet_Music_Collection...
微信小程序下拉刷新
小程序中的下拉刷新 - 掘金...
TX2 NX 修改设备树--GPIO
确认模组内使用的是哪个设备树文件 模组上电输入如下指令,查看返回值:cat /proc/device-tree/nvidia,dtsfilename找到相应的设备树文件设备树存放路径 /public_sources/Linux_for_Tegra/source/public/kernel_src/hardware/nvidia/platform/t18x/lanai/kernel-dts 确认设备树…...
.NET对象的内存布局
在.NET中,理解对象的内存布局是非常重要的,这将帮助我们更好地理解.NET的运行机制和优化代码,本文将介绍.NET中的对象内存布局。 .NET中的数据类型主要分为两类,值类型和引用类型。值类型包括了基本类型(如int、bool、double、cha…...
Hybrid App 可以从哪些技术路径实现性能优化
说到 Hybrid App(混合应用)大家都不陌生,因为这种开发模式大行其道发展的这些年取代了很多原生和 Web 应用,为什么大家对这种「Native HTML5」的开发模式额外偏爱呢? 因为一方面在一定程度上兼顾了原生应用的优质体验…...
C++入门篇7---string类
所谓的string类,其实就是我们所说的字符串,本质和c语言中的字符串数组一样,但是为了更符合C面向对象的特性,特地将它写成了一个单独的类,方便我们的使用 对其定义有兴趣的可以去看string类的文档介绍,这里…...
2308d的静态构造函数循环依赖示例
原文 //Steve: __gshared string[string] dict; shared static this() {dict ["a" : "b"]; }这里有两个论点:这不能是CRT构造器,因为它依赖于D运行时,并且认为它应该进入自己的模块是一个QoL问题,当你想要私有到类而不是私有到模块时,可为类提供它,因为语…...
Linux 目录和文件常见操作
就常见的命令: pwd pwd 显示当前的目录 目录迁移 我以如下的目录大致结构做一个简单的例子 cd 迁移到指定的路径,可以指定相对路径和绝对路径,默认相对 .指向当前路径,…/ 指向上一级的目录。 ls 列出文件及其目录 命令选…...
不基于比较的排序:基数排序
本篇只是讨论桶排序的具体实现,想了解更多算法内容可以在我的博客里搜,建议大家看看这篇排序算法总结:排序算法总结_鱼跃鹰飞的博客-CSDN博客 桶排序的原理: 代码:sort1是一个比较二逼的实现方式浪费空间,s…...
shell和反弹shell
文章目录 是什么?bash是什么?反弹shell 是什么? Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了…...
构建Docker容器监控系统(Cadvisor +Prometheus+Grafana)
Cadvisor PrometheusGrafana 1.1、Cadvisor产品简介 Cadvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行Cadvisor用户可以轻松的获取到当前主机上容器的运行统计信息,并以图表的形式向用户展示。 1.2、安装docker-ce [rootloc…...
java实现文件的下载
系统日志的获取不可能每次都登录服务器,所以在页面上能够下载系统运行的日志是必须的 如何来实现日志的下载,这样的一个功能 前端我们用到的是window.open(...)这样可以发送一个get请求到后台 后台接收到get请求之后,如何实现对文件的下载 R…...
分享Python技术下AutojsPro7云控代码
引言 有图有真相,那短视频就更是真相了。下面是三大语言的短视频。 Java源码版云控示例: Java源码版云控示例在线视频 Net源码版云控示例: Net源码版云控示例在线视频亚丁号-知识付费平台 支付后可见 扫码付费可见 Python源码版云控示例…...
【Linux】网络通信
【Linux】网络通信 文章目录 【Linux】网络通信1、网络基础1.1 计算机网络1.2 网络模型TCP & UDP1)IP地址2)端口3)TCP协议与UDP协议的比较 1.3 网络传输1.3.1 传输逻辑1.3.2 传输条件1.3.3 传输流程 1.4 地址管理 2、网络编程2.1 基本概念…...
L2-059 森林藏宝图 - java
L2-059 森林藏宝图 语言时间限制内存限制代码长度限制栈限制Java (javac)1200 ms512 MB16KB8192 KBPython (python3)500 ms256 MB16KB8192 KB其他编译器400 ms64 MB16KB8192 KB题目描述: 姥姥手里有一张森林藏宝图(别问怎么得到的)࿰…...
问卷设计对比实测:传统耗时易错 vs 虎贲等考 AI 一键生成,学术调研效率翻倍
每到课程论文、毕业论文、调研课题阶段,问卷设计与数据分析就成了最让学生头疼的环节。传统问卷要么题目不专业、维度不清晰,要么信效度不达标、数据无法分析;普通问卷工具只能收集数据,不会学术设计,更无法自动生成适…...
告别while死等!用STC15单片机定时器搞定按键短按长按(附完整代码)
STC15单片机定时器中断实现按键短按长按检测实战指南 在嵌入式开发中,按键处理是最基础却最容易出问题的环节之一。很多初学者都会遇到这样的困扰:按下按键后程序"卡死"了,数码管显示停滞、通信中断,直到松开按键才恢复…...
终极RPG Maker插件宝典:300+工具如何彻底改变你的游戏开发体验
终极RPG Maker插件宝典:300工具如何彻底改变你的游戏开发体验 【免费下载链接】RPGMakerMV RPGツクールMV、MZで動作するプラグインです。 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerMV 你是否曾为RPG Maker的默认功能限制感到沮丧?是…...
PLUTO基准:评估LLM生成硬件代码效率的新标准
1. PLUTO基准:评估LLM生成硬件代码效率的新标准在硬件设计领域,Verilog代码的自动生成正经历一场由大型语言模型(LLM)驱动的革命。然而,当我们深入探究当前LLM生成的硬件代码质量时,一个关键问题浮出水面:这些自动生成…...
WPF悬浮窗技术方案:云顶之弈实时数据辅助系统的架构设计与实现
WPF悬浮窗技术方案:云顶之弈实时数据辅助系统的架构设计与实现 【免费下载链接】TFT-Overlay Overlay for Teamfight Tactics 项目地址: https://gitcode.com/gh_mirrors/tf/TFT-Overlay 在策略自走棋游戏《英雄联盟:云顶之弈》中,玩家…...
如何快速成为开源社区贡献者:Awesome-Selfhosted入门完全指南
如何快速成为开源社区贡献者:Awesome-Selfhosted入门完全指南 【免费下载链接】awesome-selfhosted A list of Free Software network services and web applications which can be hosted on your own servers 项目地址: https://gitcode.com/GitHub_Trending/aw…...
DTLS 1.3中MAC聚合技术解析与物联网安全优化
1. DTLS 1.3中MAC聚合技术的深度解析在物联网和工业互联网快速发展的今天,无线通信的安全性和效率问题日益突出。作为保障数据完整性的核心技术,消息认证码(MAC)在DTLS 1.3协议中扮演着关键角色。然而,传统的每消息附加…...
QMK Toolbox 终极指南:3分钟掌握键盘固件烧录与调试完整流程
QMK Toolbox 终极指南:3分钟掌握键盘固件烧录与调试完整流程 【免费下载链接】qmk_toolbox A Toolbox companion for QMK Firmware 项目地址: https://gitcode.com/gh_mirrors/qm/qmk_toolbox 你是否曾经想过完全掌控自己的机械键盘?想让每一个按…...
C++26反射元编程错误码速查表,覆盖ISO/IEC 14882:2026 WD第17.8.4节全部约束违例场景
更多请点击: https://intelliparadigm.com 第一章:C26反射元编程错误码速查表概览 C26 正式引入标准化的反射(Reflection TS)支持,其核心机制依赖编译期元信息提取与类型内省。当反射操作失败时,编译器将…...
