天天看點

線上是否遇到過消息積壓的問題,下遊消費系統當機了,導緻幾百萬條消息在消息中間件裡積壓,如何處理?

線上是否遇到過消息積壓的問題,下遊消費系統當機了,導緻幾百萬條消息在消息中間件裡積壓,如何處理?

首先要找到導緻消息堆積的原因,是Producer太多了還是Consumer太少了導緻的;

并且檢查消息消費速度是否正常,正常的話,可以通過上線更多consumer臨時解決消息堆積問題;

如果Consumer和Queue個數不對等,上線了多台Consumer在短時間内也無法消費完堆積的消息;

準備一個臨時的topic(裡面定義queue的個數非常大);

queue的數量是堆積的幾倍;

上線一台Consumer,把原來Topic中的消息通過Consumer消費并投遞到新的Topic中,不做業務邏輯處理,隻是把消息消費并投遞過去;

上線N台Consumer同時消費臨時Topic中的資料;

至此完成了堆積消息的消費,後續再修改程式bug,恢複原來的Consumer,繼續消費之前的Topic;

追問:堆積時間過長消息消失了?

RocketMQ中的消息隻會在commitLog被删除的時候才會消失,也就是說未被消費的消息不會存在逾時删除這情況;

追問:堆積的消息會不會進死信隊列?

不會,消息在消費失敗後才會進入重試隊列(%RETRY%+ConsumerGroup),16次(預設16次)失敗才會進入死信隊列(%DLQ%+ConsumerGroup);