或者: 消息隊列滿了以后該怎么處理?
或者: 幾百萬消息持續積壓幾小時,怎么解決?
問題本質是消費端出問題了,不消費或者消費慢。
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的方法,補數據。(針對的是線上問題)