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

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

     1
     8
  • 皇家救星
    2019-07-25
    前天用别人号提了一个问题,我今天找到答案了。问题:搭建了一个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,生产消费即恢复正常
    
     6
  • 注定非凡
    2019-11-06
    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就越小。
    展开
    
     3
  • 我已经设置了昵称
    2019-07-24
    我们用的kafka manager。有个疑问,kafka监控工具对于单条信息支持都不好,是kafka本身特性就不支持还是怎么样。rocketMQ支持的就很好
     1
     3
  • zander
    2019-08-04
    在公司的kafka消费者监控上,经常可以看到lag 为一个负数,比如-3,-109等,想咨询一下,为什么会出现负数呢?

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

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

    真实业务场景中,我们采用过kafka tool,kafka manager和jconsole和jvisualvm。
    如果监控kafka主题、分区、数据流入流出、调整分区数、Lag等kafka manager比较直观好看,不推荐kafka tool,不方便会卡顿。
    如果要监控内存、线程安全、进程,Lag、Lead等的话,就会使用jconsole和jvisualvm,另外,有利于排查kafka是否存在死锁问题。
    
     2
  • 断情笔
    2019-12-16
    老师您好 理想情况下是不是lead值要等于offset-1?

    作者回复: lead = end of offset - log start offset。通常情况下log start offset不等于0

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

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

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

    lead=i3-i1
    lag=i2-i3

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

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

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

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

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

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

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

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

    
     1
  • wykkx
    2019-07-27
    老师请教下,使用bin/kafka-consumer-groups.sh这个方法,如果是独立的消费者,groupid那个地方要怎么填,刚才文章里还是没有说啊,谢谢。

    作者回复: 可以随意指定,不过要额外加上--partition参数

    
     1
  • 风中花
    2019-07-23
    Lead 越小可以理解为消息回头跑了,不往前跑了,越小代表越接近来的地方,代表它回原点了。快完蛋了。相当于一个逆向衡量指标。
    
     1
  • Li Shunduo
    2019-07-23
    假设Kafka集群有3台broker,如果想要监控整个集群的指标,应该连接哪个broker,还是任何一个broker都可以?

    作者回复: 都可以

    
     1
  • lmtoo
    2019-07-23
    如果消费者慢到消费的数据被删除,会出现两个后果,1消费者从头消费一遍数据,2从最新消息位移开始消费;这个从头消费一遍数据,也会导致消费的消息丢失?导致这两个后果的条件分别是什么?为什么同样的情况会导致不同的后果

    作者回复: 取决于auto.offset.reset的值

     1
     1
  • nightmare
    2019-07-23
    Lead的越小就代表可能会丢消息了吗?

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

     1
     1
  • 林
    2019-12-26
    老师,你好,我们生产环境因为特殊的原因,会在很长时期内某个topic不会有新增数据,这时用kafka-consumer-groups.sh查看就会出现CURRENT-OFFSET和LAG显示为'-',而LOG-END-OFFSET有值的情况,这是怎么回事,请解惑,谢谢。

    作者回复: 这通常是因为你的consumer group没有启动的缘故

    
    
  • 宁静致远
    2019-12-18
    胡老师,你好。kafka集群有3个节点,有个节点每天22点左右总是报以下错误。Opening socket connection to server 192.4.0.28/192.4.0.28:2181. Will not attempt to authenticate using SASL (unknown error) (org.apache.zookeeper.ClientCnxn)

    作者回复: 这种多是ZooKeeper端的瞬时错误。Kafka端有什么具体的问题表现吗?如果没有忽略就好

     1
    
  • 第一片心意
    2019-12-16
    kafkaTool是个不错的工具。
    
    
  • hunterlodge
    2019-12-12
    老师,您的那段获取消费组的lag代码,是会导致新的consumer加入到消费组里,从而引起rebalance的吧?

    作者回复: 不会引发lag,因为用的是AdminClient

    
    
我们在线,来聊聊吧