下游消費系統如果宕機了,導致幾百萬條消息在消息中間件里積壓,此時怎么處理?
你們線上是否遇到過消息積壓的生產故障?如果沒遇到過,你考慮一下如何應對?
首先要找到是什么原因導致的消息堆積,是Producer太多了,Consumer太少了導致的還是說其他情況,總之先定位問題。然后看下消息消費速度是否正常,正常的話,可以通過上線更多consumer臨時解決消息堆積問題。
如果Consumer和Queue不對等,上線了多台也在短時間內無法消費完堆積的消息怎么辦?
• 准備一個臨時的topic
• queue的數量是堆積的幾倍
• queue分布到多Broker中
• 上線一台Consumer做消息的搬運工,把原來Topic中的消息挪到新的Topic里,不做業務邏輯處理,只是挪過去
• 上線N台Consumer同時消費臨時Topic中的數據
• 改bug
• 恢復原來的Consumer,繼續消費之前的Topic
堆積時間過長消息超時了?
RocketMQ中的消息只會在commitLog被刪除的時候才會消失,不會超時。也就是說未被消費的消息不會存在超時刪除這情況。
堆積的消息會不會進死信隊列?
不會,消息在消費失敗后會進入重試隊列(%RETRY%+ConsumerGroup),