SpringBoot 线上事故(二)RocketMQ的消费秘密

72 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

前言

我实在是没想到这篇文章还有第二篇,本来以为上一次能结束这个问题的,经过一顿研究发现了一些问题所在,下面就跟着我一起看一下事情的经过。

起因

鉴于有些刚来的朋友不知道起因我就先复述一遍,在一个风和日丽的下午,我有一个toc的服务项目需要上线,其中用到了中间件是RocketMQ也就是阿里的那个开源项目(说真的阿里的这个文档没法看,太难排查了)然后跟设备服务进行一个数据对接,设备服务即时消费者也是消息推送者,而我的toc就是消费者,但是在消费的时候出现了消费不及时的问题。

排查流程

起初消息不消费,我想的是rocketMq占用满了?因为我们线上之前就被skywalking吃满过硬盘,所以怀疑commitlog没有正常保存或者toc服务器的缓冲爆了,然后开始联系相应管理员进行处理,结果线上服务一切正常,所以问题可能在别的地方。

第二天继续排查问题,这次落手点放在了topic身上怀疑topic是不是有问题,干脆就新创建了一个topic。但是创建了新的topic虽然没有新的组去消费了,但是仍然出现了no consumer yet的这个问题,并且这次观察到了他出现的频率是,4个里面有2个是不消费的,这里的4个也就是4个队列的意思,我把他调到5个他就变成3个no consumer yet,有了新发现我赶紧去找消费客户端,排查是否是客户端没有注册问题。

打开consloe Mq 果然,客户端只有2个注册,5个通道也就2个,4个通道也是两个,然后我便跑去代码当中多创建了几个consumer,客户端才填满borker 队列,至此消费才进一步平息。

image.png

image.png