之前一直用的是kafka,新公司使用的是RocketMQ,之前没接触过RocketMQ,导致告警出现消息积压,不知怎么去排查问题,趁着这次排查问题,顺便熟悉了下RocketMQ的操作。
先来熟悉下RocketMQ的控制台可视化界面:
使用教程
可视化界面

更改后如下:

主题(Topic)
1、假如说生产者发送了10条消息,此时消费者服务没有启动,因此就无法被消费,那么此时的积压的10条消息在哪看呢?
2、点击主题(Topic),找到我们发消息时的Topic,然后点击CONSUMER管理选项

如下:

3、生产者发送10条消息,看下上面的差值会有什么变化

上图可看出消息积压的数量
4、如果消息消费失败,可以重置消费位点:


5、 如果消息不重要,可以跳过消息积压:

消息(Message)
1、 接下来,如何才能看出一条消息是否被消费呢?
2、进入消息

3、选择对应的topic,进行搜索

4、选择一条消息,点击MESSAGE DETAIL,进入之后往下拉,如下:

通过trackType可以看出是否被消费
1 | NOT_ONLINE 代表该Consumer没有运行 |
而上图中trackType的值为NOT_ONLINE,说明消费者没有运行,也就是未被消费
问题排查
告警群出现告警,有消息积压:

到Grafana查看,发现确实有消息积压:

到RocketMQ控制台查看消息消费情况,发现告警的消费组不在线:

导致消息积压:

到消费者查询这个群组查不到:

研发告知创建了新的消费者群组,旧的没用就删掉了,但是没删掉对应群组的重试,死信主题:


所以导致了消息积压:

把对应消费组的重试主题删除后,再查看,发现消息积压没了:


总结:
重试主题会在消费组消费失败时自动创建(死信主题需手动创建),当消息在重试主题中达到最大重试次数仍失败时,RocketMQ 会将消息转移到死信主题,防止消息无限循环重试。旧的消费组不使用了,需要删除的时候,记得查询一下是否有对应的重试,死信主题,把对应的重试,死信主题也删掉。
