V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jiangxinlingdu
V2EX  ›  程序员

RocketMQ 部分数据消费不了问题排查

  •  
  •   jiangxinlingdu · 2019-06-10 12:34:34 +08:00 · 1138 次点击
    这是一个创建于 1779 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题现象

    今天忽然收到 RocketMQ 预警信息如下:

    提醒有部分数据没有消费,产生堆积情况。

    打开RocketMq-Console-Ng查看如下图形式:

    备注:第一反应是Consumer Group 内订阅了多个 topic ?(为什么这么怀疑,下次分析)。

    通过命令statsAll 作用是查询 Topic and Consumer tps stats

    sh mqadmin statsAll -n   namesrv |awk '{print $2}' |sort |uniq -c |  sort -k 1 -n -r
    

    发现没有问题,很奇怪?还好之前源码看过,只能调试源码了。

    源码调试

    本篇不重点讲解源码过程,后续有空再慢慢分析源码部分,消费端为了实现负载均衡器,每次当有结点添加或者减少都会重新 doRebalance,默认选择的就是获取所有队列以及得到对应 group 下面所有的 cidAll (所有的消费端),之后类似于分页操作差不多……

    进行断点到该位置发现奇怪现象:

    看到这里就明白了为什么RocketMq-Console-Ng查看下面很多是空白的没有消费端了,由于 cidAll 的 0、2、3 一样一共有 16 个队列,cidAll 显示 4 个 那么每个客户端应该是分配 4 个的,但是由于 0、2、3 都一样 就分配一次的。

    源码部分:

    备注: 现象是什么大概清楚了,下面的重点是为什么会出现这样的情况呢?

    问题排查

    通过 RocketMQ 命令查询结果还是一样:

    sh mqadmin consumerConnection  -g consumerGroup -n namesrvAddr
    

    看到这里让我不禁怀疑是否消费实例启动多次,查看代码依然没有,实在没办法偶然查看了下 tomcat 的配置,惊喜的发现: 与该使用方交流发现是的确是没有重启部署了,重启问题解决。

    待解决

    回头看看为什么会这样,RocketMQ 很多流程有点忘记了,抽空再过一遍,把这个问题梳理下。

    天仅仅只是开始,期待你的持续关注,让我们一起走进 rocketmq 的世界!!!

    往期 rocketmq 系列文章

    在阅读源码时做了一定的注释,基于 rocketmq4.1.0 加详细中文代码注释 。欢迎大家 star、fork !

    加详细中文代码注释-github

    第 1 条附言  ·  2019-06-10 22:11:18 +08:00
    jiangxinlingdu
        1
    jiangxinlingdu  
    OP
       2019-06-10 12:47:34 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   985 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 21:40 · PVG 05:40 · LAX 14:40 · JFK 17:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.