Kafka核心技术与实战
胡夕
人人贷计算平台部总监,Apache Kafka Contributor
立即订阅
8408 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么要学习Kafka?
免费
Kafka入门 (5讲)
01 | 消息引擎系统ABC
02 | 一篇文章带你快速搞定Kafka术语
03 | Kafka只是消息引擎系统吗?
04 | 我应该选择哪种Kafka?
05 | 聊聊Kafka的版本号
Kafka的基本使用 (3讲)
06 | Kafka线上集群部署方案怎么做?
07 | 最最最重要的集群参数配置(上)
08 | 最最最重要的集群参数配置(下)
客户端实践及原理剖析 (14讲)
09 | 生产者消息分区机制原理剖析
10 | 生产者压缩算法面面观
11 | 无消息丢失配置怎么实现?
12 | 客户端都有哪些不常见但是很高级的功能?
13 | Java生产者是如何管理TCP连接的?
14 | 幂等生产者和事务生产者是一回事吗?
15 | 消费者组到底是什么?
16 | 揭开神秘的“位移主题”面纱
17 | 消费者组重平衡能避免吗?
18 | Kafka中位移提交那些事儿
19 | CommitFailedException异常怎么处理?
20 | 多线程开发消费者实例
21 | Java 消费者是如何管理TCP连接的?
22 | 消费者组消费进度监控都怎么实现?
深入Kafka内核 (5讲)
23 | Kafka副本机制详解
24 | 请求是怎么被处理的?
25 | 消费者组重平衡全流程解析
26 | 你一定不能错过的Kafka控制器
27 | 关于高水位和Leader Epoch的讨论
管理与监控 (12讲)
28 | 主题管理知多少?
29 | Kafka动态配置了解下?
30 | 怎么重设消费者组位移?
31 | 常见工具脚本大汇总
32 | KafkaAdminClient:Kafka的运维利器
33 | Kafka认证机制用哪家?
34 | 云环境下的授权该怎么做?
35 | 跨集群备份解决方案MirrorMaker
36 | 你应该怎么监控Kafka?
37 | 主流的Kafka监控框架
38 | 调优Kafka,你做到了吗?
39 | 从0搭建基于Kafka的企业级实时日志流处理平台
高级Kafka应用之流处理 (3讲)
40 | Kafka Streams与其他流处理平台的差异在哪里?
41 | Kafka Streams DSL开发实例
42 | Kafka Streams在金融领域的应用
结束语 (1讲)
结束语 | 以梦为马,莫负韶华!
特别放送 (2讲)
加餐 | 搭建开发环境、阅读源码方法、经典学习资料大揭秘
用户故事 | 黄云:行百里者半九十
Kafka核心技术与实战
登录|注册

22 | 消费者组消费进度监控都怎么实现?

胡夕 2019-07-23
你好,我是胡夕。今天我要跟你分享的主题是:消费者组消费进度监控如何实现。
对于 Kafka 消费者来说,最重要的事情就是监控它们的消费进度了,或者说是监控它们消费的滞后程度。这个滞后程度有个专门的名称:消费者 Lag 或 Consumer Lag。
所谓滞后程度,就是指消费者当前落后于生产者的程度。比方说,Kafka 生产者向某主题成功生产了 100 万条消息,你的消费者当前消费了 80 万条消息,那么我们就说你的消费者滞后了 20 万条消息,即 Lag 等于 20 万。
通常来说,Lag 的单位是消息数,而且我们一般是在主题这个级别上讨论 Lag 的,但实际上,Kafka 监控 Lag 的层级是在分区上的。如果要计算主题级别的,你需要手动汇总所有主题分区的 Lag,将它们累加起来,合并成最终的 Lag 值。
我们刚刚说过,对消费者而言,Lag 应该算是最最重要的监控指标了。它直接反映了一个消费者的运行情况。一个正常工作的消费者,它的 Lag 值应该很小,甚至是接近于 0 的,这表示该消费者能够及时地消费生产者生产出来的消息,滞后程度很小。反之,如果一个消费者 Lag 值很大,通常就表明它无法跟上生产者的速度,最终 Lag 会越来越大,从而拖慢下游消息的处理速度。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Kafka核心技术与实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(33)

  • 刘丹
    对lead这个指标的含义还是不能理解。既然Lead 值是指消费者最新消费消息的位移与分区当前第一条消息的差值。好像这个值应该是越小越好,越小的话就意味着分区里未被消费的消息越少?

    作者回复: lead越小意味着consumer消费的消息越来越接近被删除的边缘,显然是不好的

    2019-07-23
    1
    5
  • 皇家救星
    前天用别人号提了一个问题,我今天找到答案了。问题:搭建了一个kafka单机服务器,消息收发正常。升级成3个服务器集群后消息能写但不能读(启动命令行消费工具后一直没输出,使用strace -f跟踪发现一直在epoll>超时>epoll的循环中),观察服务器日志无输出。定位问题过程:使用topic查询consumer_offest,发现分区leader的brokerid是0,但是我机器集群brokerid是1-3,这时才想起升级过程中把0号broker改成了1号(修改了logs和config下面的配置id)。尝试把1号改回0,重启即可正常消费。最终解决方法:使用kafka提供的工具,调整offset主题分布机器为1,2,3,生产消费即恢复正常
    2019-07-25
    4
  • 我已经设置了昵称
    我们用的kafka manager。有个疑问,kafka监控工具对于单条信息支持都不好,是kafka本身特性就不支持还是怎么样。rocketMQ支持的就很好
    2019-07-24
    1
    3
  • 注定非凡
    1 为什么要监控
    A :对于Kafka消费者,最重要的事情就是监控它们的消费进度(消费的滞后程度)常称为:Consumer Lag

    B :Lag的单位是消息数,他直接反映了一个消费者的运行情况。一个正常的消费者的Lag应当很小,设置为0。这表明消费者能够及时地消费生产者生产出来的消息。反之,一个消费者Lag值很大的话表明它无法跟上生产者的速度。

    C :如果消费者速度无法匹及生产者的数据,极有可能导致它消费的数据已经不在操作系统的页缓存中了,那些数据就失去了享有Zero Copy技术的条件,不得不从磁盘中读取,进一步拉大了与生产者的差距。并且会越来大。

    所以:在实际业务场景中必须时刻关注消费者的消费进度。一旦出现Lag逐步增加的趋势,就要立即定位问题,及时处理,避免问题扩散。

    2 如何监控
    A :使用Kafka自带的命令行工具kafka-consumer-groups脚本
    B :使用Kafka Java Conssumer API编程
    C :使用Kafka自带的JMX监控指标

    3 方法具体分析
    A :Kafka自带命令
    (1) kafka-consumer-groups脚本是kafka为我们提供的最直接的监控消费者消费进度工具。
    (2) 使用:
    $ bin/kafka-consumer-groups.sh --bootstrap-server <Kafka broker连接信息 > --describe --group <group 名称 >

    <Kafka broker 连接信息 >:主机:端口
    <group 名称 > :要监控的消费组的 group.id值
    (3)展示的信息:主题,分区,该消费者组最新消费消息的位移值(CURRENT-OFFSET值),每个分区当前最新生产的消息的位移值(LOG-END-OFFSET),LAG(前两者的差值),消费者实例ID,消费者连接Broker的主机名以及消费者的CLENT-ID信息。

    B :Kafka Java Consumer API
    (1)首先获取给定的消费者组的最新消费消息的位移
    (2)在获取订阅分区的最新消息位移
    (3)最后执行相应的减法操作,获取Lag值并封装进一个Map对象。

    C :Kafka JMX监控指标
    使用Kafka默认提供 的JMX监控指标来监控消费者的Lag值。
    (1)Kafka消费者提供了一个名为Kafka.consumer:type=consumer-fetch-manager-metrics,client-id=”{client-id}”的JMX指标。
    (2)有两个重要的属性:records-lag-max 和 records-lead-min 分别表示消费者在测试窗口时间内曾经达到的最大的Lag值和最小的Lead值。
    (3)Lead值是指消费者最新消费消息的位移和分区当前第一条消息的位移的差值。即:Lag越大,Lead就越小。
    2019-11-06
    1
  • zander
    在公司的kafka消费者监控上,经常可以看到lag 为一个负数,比如-3,-109等,想咨询一下,为什么会出现负数呢?

    作者回复: 可能出现丢失数据了。lag<0一定要重点关注

    2019-08-04
    1
  • 小头针
    听胡老师这节课,最大的收获就是知道了Lead指标的重要性,之前就没注意到这个指标。

    真实业务场景中,我们采用过kafka tool,kafka manager和jconsole和jvisualvm。
    如果监控kafka主题、分区、数据流入流出、调整分区数、Lag等kafka manager比较直观好看,不推荐kafka tool,不方便会卡顿。
    如果要监控内存、线程安全、进程,Lag、Lead等的话,就会使用jconsole和jvisualvm,另外,有利于排查kafka是否存在死锁问题。
    2019-07-30
    1
  • 风中花
    Lead 越小可以理解为消息回头跑了,不往前跑了,越小代表越接近来的地方,代表它回原点了。快完蛋了。相当于一个逆向衡量指标。
    2019-07-23
    1
  • nightmare
    Lead的越小就代表可能会丢消息了吗?

    作者回复: 是啊,因为已经逼近最早的消息了

    2019-07-23
    1
    1
  • 曾轼麟
    老师,请问你的这个消费者堆积监控代码,是否会触发消费者组的rebalance呢?
    2019-12-12
  • pain
    感觉通过 javaAPI 的方式有问题啊。第一,引入 consumer 只是获取位移,可能会引起 rebalance。而且 consumer.endOffsets(consumedOffsets.keySet()); 这个方法,consumer 能获取到所有分区的位移信息吗?我一直以为是这样的:consumer 只能获取这个 consumer 所分配到的分区的位移

    作者回复: 第一、不会引入rebalance,因为没有subscribe;
    第二、可以,因为AdminClient的listConsumerGroupOffsets访问所有分区

    2019-11-09
  • 昀溪
    老师 怎么能够获取生产者 消费者和主题的关系呢。 我们想要梳理目前线上的 哪些生产者往哪些主题发消息以及哪些消费者消费某些主题。希望能快速获取并梳理出来 老师能不能给一些思路 谢谢

    作者回复: 目前无法获取到集群中生产者的数量信息,因为broker端并没有这方面的记录。消费者的话可以使用kafka-consumer-groups命令来间接获取

    2019-10-12
    1
  • 天天向上
    分区第一条生产的消息偏移量 记为i1
    分区最后一条生产的消息偏移量 记为i2
    消费者在当前分区消费的最后一条消息的偏移量 记为i3

    lead=i3-i1
    lag=i2-i3

    画条直线标记三个点就特别容易理解啦
    lag越大说明 消费速度小于生产速度
    lead越小 说明消费速度快临近删除速度啦 要特别小心啦

    消费慢 如果消息不删除可以慢慢消费无大碍

    消费慢 如果消息有删除策略 就要掂记着别过分的慢 还没来得及消费就删除啦

    而消息中间件不可能不删除陈旧消息的 所以lead参数的监控更要注意

    2019-09-23
  • 谢特
    为什么lag值大,lead值就小呢

    作者回复: 也不是绝对的相反关系,只是说明大概率情况下如果lag增加了,那么说明consumer消费速度慢了,自然已消费的位移就比较靠近起始位移了

    2019-09-18
  • chp
    老师,发现消息滞后后,应该怎么办?重启消费者?

    作者回复: 我不太建议出现问题就重启,因为重启之后在想弄清楚原因就比较困难了。不妨先诊断一下为什么出现滞后,是否是因为消息处理时间太长导致,如果是因为这个即使重启也无助于事的

    2019-09-10
  • Guard-God
    您好,我已经连接consumer的JMX端口。但是,又发现如果要配置监控consumer端的话,就不好维护了。因为有几十个消费者,同时有几十个topic, 如果这要是配置的话,大约配置需要几百个。我们基本上就是通过监控Broker,获取到每秒产生的消息数量,按照消费者和topic计算出生产速度和消费速度,同时监控topic所在的网络IO等。我们也是只是配置几个重要消费者,并没有全配置,因为维护成本有点高,请问还有其他好的监控或者配置方式吗

    作者回复: 确实没有更好的了。因为目前你只能连接单个进程开放的JMX

    2019-09-04
  • Guard-God
    老师您好,jmx 监控的lead我认为很重要,但是,我使用JConsole连接后怎么就没有kafka.consumer,这块呢?我测了好多版本,我想问一下,这个是如何配置的

    作者回复: 你连接的是Broker的JMX端口吧,你需要连接consumer的JMX端口

    2019-09-03
    1
  • godtrue
    我和明翼的理解一样
    好比一个带固定格子的传送带,producer不断的往格子里放砖头,consumer在后面追赶他不断的从格子中捡砖头,producer的位置和consumer的位置的格子数就是consumer没捡完的砖头数——lag。而这个传送带从头开始在燃烧着,consumer的位置和传送带当前正在燃烧的位置之间的格子数就是——lead
    我们没用kafka,是公司架构部自研的,使用入队数、出队数、积压数、归档数等来表示消费的进度,这些数的取数原理和kafka想必类似!
    2019-08-17
  • 大树
    为什么我在mbean树下找不到kafka.consumer,我的kafka版本是2.1.0

    作者回复: 你连接是不是Broker端的JMX

    2019-08-14
    1
  • xyf
    老师,请教下: 是否有方法可以直接监控某个topic的各个消费组的消费进度?

    作者回复: 你可以手动写代码实现。用AdminClient的各个API组合实现

    2019-08-06
  • 陆攀
    老师,除了监控lag外,我还想监控消费的延迟时间。比如我想知道消费的当条数据的产生时间和当前最后一条数据的产生时间的差。这种有什么办法吗?

    作者回复: 消息里面有创建的时间戳,可以用程序自行计算

    2019-08-01
收起评论
33
返回
顶部