首先要找到原因,是producer太多了,還是說consumer太少了。定位問題,然后看下消息的消費速度是否正常,正常的話,可以通過臨時上線更多consumer解決問題。
如果consumer和queue不對等,上線了多台consumer也無法解決的話,可以
- 准備一個臨時的topic;
- queue的數量是堆積的N倍;
- queue分布到多台broker中
- 上線一台consumer做消息搬運工,把原來topic中的信息搬到新topic中,不做業務處理,只搬運
- 上線N台consumer同時消費topic中的數據
tip1:堆積時間過長消息會超時嗎?
rocketMQ中的消息只有在commitLog被刪除的時候才會消失,不會超時。也就是說沒被消費的消息不存在會被超時刪除這種情況。
tip2:堆積的消息會不會進入死信隊列?
不會的,消息再被消費失敗后會進入重試隊列。