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里面去,讓消費者去消費