如何解決消息隊列的延時及過期失效問題?


或者: 消息隊列滿了以后該怎么處理?

或者: 幾百萬消息持續積壓幾小時,怎么解決?

 

問題本質是消費端出問題了,不消費或者消費慢

 

1、消費端出問題了,大量消息積壓在kafka里幾個小時,怎么辦?

正常思路是:修復consumer的問題,讓他恢復消費,然后傻等幾個小時消費完畢(不可取,用戶等不了)

實際解決方法:只能操作臨時緊急擴容

    (1)修復consumer問題,確保其恢復消費速度,然后停掉現有consumer;

    (2)新建topic並設置原來10倍或者20倍的partition,不管是改原來的消費者將消息寫入新partition,還是直接處理積壓的消息進partition,新建10倍或20倍的consumer,來處理消息並寫庫;

    (3)等快速消費完積壓數據后,恢復原先的部署架構,重新用原來的consumer機器來消費數據;

 

 2、假設用的是rabbitMQ。rabbitMQ是可以設置過期時間的。如果消息在queue里積壓一定時間就會被rabbitMQ清掉,造成的問題是因積壓超時而丟數據了。

解決方法是: 重導入數據。手工查找丟的數據,重新灌入MQ里面去(一般不設rabbitMQ的過期時間

3、消息積壓在MQ里導致MQ快滿了

解決方法:臨時寫程序接入消息來消費,消費一個丟一個(不寫庫了,快速把MQ里的消息處理掉)

      然后到晚上再采用2的方法,補數據。(針對的是線上問題)


免責聲明!

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



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