Kafka中的这只“千里眼”,你需要知道!!!

Kafka中的这只“千里眼”,你需要知道!!!

作者:丁威 2021-07-26 10:48:47

开发

架构

Kafka 作为Kafka集群的负责人,消费端出现消息积压,反复发生重平衡等问题时,如何快速定位性能瓶颈显的至关重要。

[[413084]]

作为Kafka集群的负责人,消费端出现消息积压,反复发生重平衡等问题时,如何快速定位性能瓶颈显的至关重要。

本篇将详细介绍消费端端监控指标,让架构师提出的性能优化方案提供数据支撑。

Kafka的设计者早就为我们考虑好了,提供了丰富多彩的监控指标。

1、消费端指标

Kafka中的监控指标通过MBean进行存储,我们可以通过jconsole中进行查看,截图如下:

主要分为如下四个维度展开:

  • Consumer-coordinator-metrics

消费者组协调器相关的监控指标。

  • Consumer-fetch-manager-metrics

消费组消息拉取相关的监控指标

  • Consumer-node-metrics

以broker节点为维度的统计信息,消费端向多个broker节点拉取消息等监控指标。

  • Kafka-metrics-count

接下来将分别展开,详细介绍其各个指标的含义,并给出一些实践指导。

1.1 消费者组协调器监控指标

组协调器相关的监控指标明细说明如下:

详细说明如下:

  • join-time-max

消费者重新加入消费组的最大时长

  • join-time-avg

消费者重新加入消费组的平均时长

  • join-rate

消费者加入消费组的TPS

实践指导:该值为0正常,该值越大,越有问题,说明消费者在频繁加入消费者,在加入消费者的过程中消费者是不会消费消息的。

  • join-time-avg

消费者加入消费组的平均时间

  • join-total

该消费者重新加入消费组的次数(重平衡发生的次数)

实践指导:该值值的采集,如果该值过大,说明发生重平衡的次数太多,重平衡时该消费者时不参与消息消费。

  • commit-latency-avg

提交位点的平均耗时

  • commit-rate

提交位点的tps

  • commit-latency-max

提交位点时的最大延迟时间

  • commit-total

消费者启动以来的位点提交的总次数

  • sync-time-avg

消费者发送sync的平均响应时长。

知识点:消费者加入小组后由该消费者中的Leader负责进行队列分配,然后将分配方案发送给组协议器,各个从节点将向组协调器获取分配队列。

  • sync-rate

消费者发送sync的tps

  • sync-total

消费者发送sync请求的总次数

  • sync-time-max

消费者sync请求响应的最大响应时间

  • assigned-partitions

当前分配到的分区数量

  • heartbeat-total

心跳请求的总数

  • heartbeat-response-time-max

心跳请求的最大响应时间

  • last-heartbeat-seconds-ago

上一次发送心跳包的时间

  • heartbeat-rate

发送心跳包的tps

从监控指标来看,我们有能得知消费端协调器的职责:

  • 协调消费者加入消费组
  • 协调消费者Leader进行队列负载分配
  • 发送心跳,保持会话
  • 提交位点

1.2 消费者消息拉取监控指标

消费者与消息拉取相关的监控指标如下图所示:

 

消费组拉取指标的组织分成消费组与该消费组订阅的多个topic两个维度。

接下来详细分析上述指标:

  • bytes-consumed-rate

消费端每秒提交到业务的tps。

  • bytes-consumed-total

消费端目前消费的总字节数。

  • fetch-latency-max

API.FETCH请求(即向broker端发送消息拉取)的最大耗时。

  • records-per-request-avg

每一次Fetch请求拉取的消息条数(对当前指标取平均值)。

  • fetch-rate

客户端发送Fetch请求的tps。

  • fetch-total

客户端总共发起的Fetch请求个数

  • fetch-throttle-time-max

消息拉取(Fetch请求)由于服务端(broker)限流的最大限流时长,关于broker端限流机制,后续会重点探究。

  • fetch-throttle-time-avg

消息拉取Fetch请求的平均限流时长。

  • fetch-size-max

单个分区一次消息拉取最大的字节数。

实践指导:该值非常有必要采集监控,可以评估消费端消息的拉取能力,如果该值持续接近设置的期望值,如果消费端tps不满足需求,可以适当调大该值。

  • fetch-latency-avg

消息拉取的平均耗时。

  • fetch-size-avg

一次消息拉取的平均字节数

  • records-consumed-total

消费端消费端总字节数

  • records-lead-min

当前消费位点与日志端中最小位点的差值。

  • records-lag-max

分配给消费者的分区中,消息积压的最大值。

实战指导:可以基于该值做告警。

消费者还会从主题-分区级别采集与消费进度相关的指标,相关指标说明如下:

  • records-lag
  • records-lag-avg
  • records-lag-max
  • records-lead
  • records-lead-avg
  • records-lead-min

对于上述指标,主要是解释一下两个基本的含义,其他指标是对其进行聚合计算(max,avg)。

  • records-lag

消费积压,即消费位点与当前分区最大位点点差距,该值越大,说明消费端处理速度越慢,需要十分关注,通常需要接入告警,及时通知项目方。

  • records-lead

消费位点与当前分区最小位点的差距,我对该值的具体用途暂未参悟,有心的读者看到,欢迎与我共同交流。

1.3 消费者网络相关监控指标

上面的指标主要是关注消费端协调器、消费端Fetch(消息拉取)两个重要维度,接下来关注一下从消息者的视角关注一下底层网络IO等维度相关的指标,相关指标的采集入口位Kafka的org.apache.kafka.common.network.Selector,其具体的指标如下图所示:

其实这些指标基本与生产者相同,说明如下:

  • request-rate

请求发送tps。

  • request-size-max

请求发送的最大字节

  • request-size-avg

请求的平均大小

  • request-total

总共的请求个数

  • select-rate

事件选择器tps。

  • select-total

事件选择器执行事件选择的总次数

  • response-total

响应请求总数

  • response-rate

响应TPS

  • outgoing-byte-rate

每秒发送字节数

  • outgoing-byte-total

总发送字节数

  • incoming-byte-rate

每秒接受字节数

  • incoming-byte-total

总工接受字节数

  • io-ratio

IO线程处理IO读写的总时间

  • io-time-ns-avg

每一次事件选择器调用IO操作的平均时间(单位为纳秒)

  • io-waittime-total

io线程等待读写就绪的平均时间(单位为纳秒)

  • iotime-total

io处理总时间。

  • io-wait-ratio

io等待占io总处理时间的比例

  • io-wait-time-ns-avg

io线程平均等待时间(纳秒)

实战指导:网络相关的监控指标,可以重点关注一下io线程相关的性能。

1.4 按broker节点采集监控数据

客户端还会按照broker的维度,重点采集与请求相关的指标,例如请求tps、平均响应时间。

实战指导:监控指标的含义都已经在上文中提到过,这些指标应该是最值得采集,特别是request-latency-max、request-latency-avg,这对确认broker是否存在瓶颈。

2、监控指标采集

虽然Kafka内置了众多的监控指标,但这些指标默认是存储在内存中,既然是存放在内存中,为了避免监控数据无休止的增加内存触发内存溢出,通常监控数据的存储基本是基于滑动窗口,即只会存储最近一段时间内的监控数据,进行滚动覆盖。

故为了更加直观的展示这些指标,因为需要定时将这些信息进行采集,统一存储在其他数据库等持久化存储,可以根据历史数据绘制曲线,希望实现的效果如下图所示:

在这里插入图片描述

基本的监控采集系统架构设计如下图所示:

mq-collect应该是放在生产者SDK中,通过mq-collect类库异步定时将采集信息上传的到时序数据库InfluxDB,然后通过mq-portal门户展示页面,对每一个生产客户端按指标进行可视化展示,实现监控数据的可视化,从而为性能优化提供依据。

本文转载自微信公众号「中间件兴趣圈」,可以通过以下二维码关注。转载本文请联系中间件兴趣圈公众号。

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/285485.html<

(0)
运维的头像运维
上一篇2025-05-14 22:04
下一篇 2025-05-14 22:05

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注