問題描述
線上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有大量積壓需要處理很長時間才能恢復的情況下;