问题描述
线上Broker所有在主机IO异常,导致Broker异常退出,主机问题解决后,重启Broker,发现group-A的几个consumeQueue,diff值有几十万,而通过查看日志信息发现该Group的consumeQueue只有几个消息未被消息,那么只能说明Broker异常恢复后将已经消费过的消息重新加载到了consumeQueue中,即:consumeQueue在Broker异常恢复过程中被重置了。
通过该线上故障需要弄清楚以下问题:
1、在Broker异常恢复过程中在什么场景下重置了consumeQueue?
2、Consumer消费完消息后如何更新consumeQueue?
https://mp.weixin.qq.com/s/3BiIvcZ6RPRKNiM-4eCs9Q
3、Broker异常重启后如何将异常加载的consumeQueue积压数据恢复到正常状态?
https://mp.csdn.net/postedit/102505114
问题解决
测试环境模拟Broker异常consumeQueue有消息积压,Broker启动后查看consumeQueue,如下:
将Broker停掉,修改./config/consumerOffset.json
修改后:
重启Broker,查看consumeQueue ,如下:
总结
如果重启后只有少量消息堆积且有重复消息的话可以不使用上述方法;
该方法使用只建议在:需要保证消息已经消费过,或者该topic的消息允许有部分丢弃,并且consumeQueue有大量积压需要处理很长时间才能恢复的情况下;