訊息積壓在mq中是一件很正常的事,但是積壓過多了,就可以會導致訊息的丟失,甚至系統的崩潰。那我們從事前的預防和事後的處理兩個方面去解決。
我們如何預防訊息積壓呢,一般就是批量和增加併發這兩個方法,傳送端和消費端都可以從這兩個方面去處理。
1.1 傳送端
1.批量。比如一次從資料庫中批量查出資料傳送mq。
2.增加併發。多執行緒併發處理
1.2 消費端
我們常用的乙個做法是收到乙個mq訊息後,直接放入乙個記憶體佇列中,返回mq確認,後台再多執行緒併發處理。雖然消費的速度加快了,但是這裡有乙個問題,此時消費端宕機了,記憶體佇列的資料就會丟失,這條訊息就會丟失了。所以我們必須處理完訊息才能給mq傳送訊息確認。
增加消費端consumer的例項數量的同事,必須擴容主題中佇列的數量,確保consumer的是例項數和佇列數是相等的。至於為什麼必須擴容佇列數量,因為在同乙個佇列中是單執行緒處理的,如果佇列數量沒有增加,那麼即使增加了consumer的數量,消費的速度也沒有增加。
如果生產上出現了訊息積壓過多,我們又該如何處理呢?必須先將積壓的訊息快速消費掉後,再慢慢找原因。
一般訊息積壓無非兩個原因,傳送過快或者消費過慢,我們可以通過mq的監控確定是那個端出現了問題。
1.傳送過快。消費端的速度趕不上傳送的速度。
1.1 緊急擴容消費端例項,快速消費訊息。
1.2 如果沒有足夠的伺服器擴容,系統降級,將一些不重要的任務關閉,減少傳送端的資料量,優先處理積壓的訊息。
2.消費過慢。檢查日誌檢視錯誤原因,列印堆疊資訊等檢視是否發生思索或者等待某些資源導致消費很慢。
3.如果發現傳送和消費的速度和往常差不多,需要檢查日誌是否有訊息是否消費失敗了,導致一直反覆消費。
訊息持續積壓幾小時怎麼辦
大量訊息在mq裡積壓了幾個小時了還沒解決 幾千萬條資料在mq裡積壓了七八個小時,最簡單的方法可以讓他恢復消費速度,然後等待幾個小時消費完畢。乙個消費者一秒是1000條,一秒3個消費者是3000條,一分鐘是18萬條,1000多萬條 所以如果你積壓了幾百萬到上千萬的資料,即使消費者恢復了,也需要大概1小...
當事情多了,我該怎麼辦
我是那種什麼事情都想做好的人,可每個人的時間和精力終究是有限的。大二一年,我是班級的班長,雖不能說為班級操碎了心,但大大小小的事始終都有我的參與,想讓班裡的同學對每件事都滿意。本來,大二我是這麼想的,什麼事都不做,除了學習,就是在飛思團隊裡做小車,可是,大二,我當了班長,不僅如此,學院黨建辦改革,我...
MQ有幾百萬訊息持續積壓幾小時該怎麼辦
如何解決訊息佇列的延時以及過期失效問題?訊息佇列滿了以後該怎麼處理?有幾百萬訊息持續積壓幾小時,說說怎麼解決?你看這問法,其實本質針對的場景,都是說,可能你的消費端出了問題,不消費了 或者消費的速度極其慢。接著就坑爹了,可能你的訊息佇列集群的磁碟都快寫滿了,都沒人消費,這個時候怎麼辦?或者是這整個就...