消息堆積事故解決方案(轉(zhuǎn))

https://blog.csdn.net/chang384915878/article/details/86742792

面試題

如何解決消息隊(duì)列的延時(shí)以及過期失效問題怎棱?消息隊(duì)列滿了以后該怎么處理?有幾百萬消息持續(xù)積壓幾小時(shí)墩新,說說怎么解決?

面試官心理分析

你看這問法,其實(shí)本質(zhì)針對(duì)的場(chǎng)景,都是說柴罐,可能你的消費(fèi)端出了問題,不消費(fèi)了综芥;或者消費(fèi)的速度極其慢丽蝎。接著就坑爹了猎拨,可能你的消息隊(duì)列集群的磁盤都快寫滿了膀藐,都沒人消費(fèi),這個(gè)時(shí)候怎么辦红省?或者是這整個(gè)就積壓了幾個(gè)小時(shí)额各,你這個(gè)時(shí)候怎么辦?或者是你積壓的時(shí)間太長(zhǎng)了吧恃,導(dǎo)致比如 RabbitMQ 設(shè)置了消息過期時(shí)間后就沒了怎么辦虾啦?

所以就這事兒,其實(shí)線上挺常見的痕寓,一般不出傲醉,一出就是大 case。一般常見于呻率,舉個(gè)例子硬毕,消費(fèi)端每次消費(fèi)之后要寫 mysql,結(jié)果 mysql 掛了礼仗,消費(fèi)端 hang 那兒了吐咳,不動(dòng)了逻悠;或者是消費(fèi)端出了個(gè)什么岔子,導(dǎo)致消費(fèi)速度極其慢韭脊。

面試題剖析

關(guān)于這個(gè)事兒童谒,我們一個(gè)一個(gè)來梳理吧,先假設(shè)一個(gè)場(chǎng)景沪羔,我們現(xiàn)在消費(fèi)端出故障了饥伊,然后大量消息在 mq 里積壓,現(xiàn)在出事故了蔫饰,慌了撵渡。

大量消息在 mq 里積壓了幾個(gè)小時(shí)了還沒解決

幾千萬條數(shù)據(jù)在 MQ 里積壓了七八個(gè)小時(shí),從下午 4 點(diǎn)多死嗦,積壓到了晚上 11 點(diǎn)多趋距。這個(gè)是我們真實(shí)遇到過的一個(gè)場(chǎng)景,確實(shí)是線上故障了越除,這個(gè)時(shí)候要不然就是修復(fù) consumer 的問題节腐,讓它恢復(fù)消費(fèi)速度,然后傻傻的等待幾個(gè)小時(shí)消費(fèi)完畢摘盆。這個(gè)肯定不能在面試的時(shí)候說吧翼雀。

一個(gè)消費(fèi)者一秒是 1000 條,一秒 3 個(gè)消費(fèi)者是 3000 條孩擂,一分鐘就是 18 萬條狼渊。所以如果你積壓了幾百萬到上千萬的數(shù)據(jù),即使消費(fèi)者恢復(fù)了类垦,也需要大概 1 小時(shí)的時(shí)間才能恢復(fù)過來狈邑。

一般這個(gè)時(shí)候,只能臨時(shí)緊急擴(kuò)容了蚤认,具體操作步驟和思路如下:

先修復(fù) consumer 的問題米苹,確保其恢復(fù)消費(fèi)速度,然后將現(xiàn)有 consumer 都停掉砰琢。
新建一個(gè) topic蘸嘶,partition 是原來的 10 倍,臨時(shí)建立好原先 10 倍的 queue 數(shù)量陪汽。
然后寫一個(gè)臨時(shí)的分發(fā)數(shù)據(jù)的 consumer 程序训唱,這個(gè)程序部署上去消費(fèi)積壓的數(shù)據(jù),消費(fèi)之后不做耗時(shí)的處理挚冤,直接均勻輪詢寫入臨時(shí)建立好的 10 倍數(shù)量的 queue况增。
接著臨時(shí)征用 10 倍的機(jī)器來部署 consumer,每一批 consumer 消費(fèi)一個(gè)臨時(shí) queue 的數(shù)據(jù)你辣。這種做法相當(dāng)于是臨時(shí)將 queue 資源和 consumer 資源擴(kuò)大 10 倍巡通,以正常的 10 倍速度來消費(fèi)數(shù)據(jù)尘执。
等快速消費(fèi)完積壓數(shù)據(jù)之后,得恢復(fù)原先部署的架構(gòu)宴凉,重新用原先的 consumer 機(jī)器來消費(fèi)消息誊锭。
mq 中的消息過期失效了

假設(shè)你用的是 RabbitMQ,RabbtiMQ 是可以設(shè)置過期時(shí)間的弥锄,也就是 TTL丧靡。如果消息在 queue 中積壓超過一定的時(shí)間就會(huì)被 RabbitMQ 給清理掉,這個(gè)數(shù)據(jù)就沒了籽暇。那這就是第二個(gè)坑了温治。這就不是說數(shù)據(jù)會(huì)大量積壓在 mq 里,而是大量的數(shù)據(jù)會(huì)直接搞丟戒悠。

這個(gè)情況下熬荆,就不是說要增加 consumer 消費(fèi)積壓的消息,因?yàn)閷?shí)際上沒啥積壓绸狐,而是丟了大量的消息卤恳。我們可以采取一個(gè)方案,就是批量重導(dǎo)寒矿,這個(gè)我們之前線上也有類似的場(chǎng)景干過突琳。就是大量積壓的時(shí)候,我們當(dāng)時(shí)就直接丟棄數(shù)據(jù)了符相,然后等過了高峰期以后拆融,比如大家一起喝咖啡熬夜到晚上12點(diǎn)以后,用戶都睡覺了啊终。這個(gè)時(shí)候我們就開始寫程序镜豹,將丟失的那批數(shù)據(jù),寫個(gè)臨時(shí)程序孕索,一點(diǎn)一點(diǎn)的查出來逛艰,然后重新灌入 mq 里面去躏碳,把白天丟的數(shù)據(jù)給他補(bǔ)回來搞旭。也只能是這樣了。

假設(shè) 1 萬個(gè)訂單積壓在 mq 里面菇绵,沒有處理肄渗,其中 1000 個(gè)訂單都丟了,你只能手動(dòng)寫程序把那 1000 個(gè)訂單給查出來咬最,手動(dòng)發(fā)到 mq 里去再補(bǔ)一次翎嫡。

mq 都快寫滿了

如果消息積壓在 mq 里,你很長(zhǎng)時(shí)間都沒有處理掉永乌,此時(shí)導(dǎo)致 mq 都快寫滿了惑申,咋辦具伍?這個(gè)還有別的辦法嗎?沒有圈驼,誰讓你第一個(gè)方案執(zhí)行的太慢了人芽,你臨時(shí)寫程序,接入數(shù)據(jù)來消費(fèi)绩脆,消費(fèi)一個(gè)丟棄一個(gè)萤厅,都不要了,快速消費(fèi)掉所有的消息靴迫。然后走第二個(gè)方案惕味,到了晚上再補(bǔ)數(shù)據(jù)吧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末玉锌,一起剝皮案震驚了整個(gè)濱河市名挥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌主守,老刑警劉巖躺同,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異丸逸,居然都是意外死亡蹋艺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門黄刚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捎谨,“玉大人,你說我怎么就攤上這事憔维√尉龋” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵业扒,是天一觀的道長(zhǎng)检吆。 經(jīng)常有香客問我,道長(zhǎng)程储,這世上最難降的妖魔是什么蹭沛? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮章鲤,結(jié)果婚禮上摊灭,老公的妹妹穿的比我還像新娘。我一直安慰自己败徊,他們只是感情好帚呼,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般煤杀。 火紅的嫁衣襯著肌膚如雪眷蜈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天沈自,我揣著相機(jī)與錄音端蛆,去河邊找鬼。 笑死酥泛,一個(gè)胖子當(dāng)著我的面吹牛今豆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播柔袁,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼呆躲,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了捶索?” 一聲冷哼從身側(cè)響起插掂,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腥例,沒想到半個(gè)月后辅甥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡燎竖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年璃弄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片构回。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夏块,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纤掸,到底是詐尸還是另有隱情脐供,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布借跪,位于F島的核電站政己,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏掏愁。R本人自食惡果不足惜歇由,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望托猩。 院中可真熱鬧印蓖,春花似錦、人聲如沸京腥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)公浪。三九已至他宛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間欠气,已是汗流浹背厅各。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留预柒,地道東北人队塘。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像宜鸯,于是被迫代替她去往敵國(guó)和親憔古。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容