【RocketMQ】RocketMQ消息堆積的問題怎么處理?


 RocketMQ消息堆積的問題

1.發生的原因:

  由於Consumer故障導致消費着節點全部宕機,生產者還在不停的投遞消息到Broker,消息被擠壓在Broker沒有被消費;

2.消息堆積導致的問題:

  過多的數據不僅占用磁盤空間,還會影響MQ性能;

3.解決方案:

  分三種情況:

  情況0,如果消息是可以被丟棄的,那么就修改代碼直接將代碼中獲取的消息直接丟棄,不做任何處理;

  情況1, Topic中MessageQueue的數量大於Consumer的實例數量,可以將Consumer擴容,MessageQueue 會進行Rebalance重新分配給Consumer實例,此時多個Consumer實例可以迅速消費掉堆積的消息,但是要考慮到的后續如果業務中有DB操作,DB是否支持這么高的讀寫操作;

  情況2, Topic中MessageQueue的數量小於Consumer的實例數量,此時直接擴容Consumer的實例數量是沒用的,擴容后的Consumer實例仍然無法消費MessageQueue里面的消息; 此時可以修改項目代碼,新建一個臨時的Topic,制定臨時Topic的MessageQueue數量為多個,然后再啟動多個臨時消費實例;此時Consumer將堆積的Topic里面對應的消息,不處理,收到后直接丟到新的Topic里面去,讓消費者去消費


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM