大資料之訊息佇列 6 資料積壓問題

2021-09-23 10:47:52 字數 903 閱讀 7960

1、面試題

如何保證訊息的順序性?

2、面試官心裡分析

其實這個也是用mq的時候必問的話題,第一看看你了解不了解順序這個事兒?第二看看你有沒有辦法保證訊息是有順序的?這個生產系統中常見的問題。

3、面試題剖析

我舉個例子,我們以前做過乙個mysql binlog同步的系統,壓力還是非常大的,日同步資料要達到上億。mysql -> mysql,常見的一點在於說大資料team,就需要同步乙個mysql庫過來,對公司的業務系統的資料做各種複雜的操作。

你在mysql裡增刪改一條資料,對應出來了增刪改3條binlog,接著這三條binlog傳送到mq裡面,到消費出來依次執行,起碼得保證人家是按照順序來的吧?不然本來是:增加、修改、刪除;你楞是換了順序給執行成刪除、修改、增加,不全錯了麼。

本來這個資料同步過來,應該最後這個資料被刪除了;結果你搞錯了這個順序,最後這個資料保留下來了,資料同步就出錯了。

先看看順序會錯亂的倆場景

(1)rabbitmq:乙個queue,多個consumer,這不明顯亂了

(2)kafka:乙個topic,乙個partition,乙個consumer,內部多執行緒,這不也明顯亂了

那如何保證訊息的順序性呢?簡單簡單

(1)rabbitmq:拆分多個queue,每個queue乙個consumer,就是多一些queue而已,確實是麻煩點;或者就乙個queue但是對應乙個consumer,然後這個consumer內部用記憶體佇列做排隊,然後分發給底層不同的worker來處理

(2)kafka:乙個topic,乙個partition,乙個consumer,內部單執行緒消費,寫n個記憶體queue,然後n個執行緒分別消費乙個記憶體queue即可

訊息佇列如何解決訊息積壓問題

訊息佇列訊息積壓了怎麼辦?q 剛開始是對這個疑問抱有質疑態度的,因為使用訊息佇列的其中目的就是削峰填谷,來避免高流量時,對下游服務的衝擊,所以使用訊息佇列進行緩衝,下游根據自己的消費能力去消費,我感覺這就是訊息積壓本就是使用訊息佇列的功能,怎麼會是問題呢?a 首先訊息積壓是正常現象,但凡是過多就不正...

大資料之訊息佇列 7 如何進行架構設計

1 面試題 如果讓你寫乙個訊息佇列,該如何進行架構設計啊?說一下你的思路 2 面試官心裡分析 其實聊到這個問題,一般面試官要考察兩塊 1 你有沒有對某乙個訊息佇列做過較為深入的原理的了解,或者從整體了解把握住乙個mq的架構原理 2 看看你的設計能力,給你乙個常見的系統,就是訊息佇列系統,看看你能不能...

RibbitMQ 大資料分布式下的訊息佇列思

對於ribbitmq 訊息佇列 使用 定義乙個佇列,作為訊息佇列 生產者,生產訊息新增入佇列 消費者,監聽到訊息佇列中有訊息後,取出訊息處理訊息 每台伺服器也可以配置多個消費者去處理訊息 此處向handler中,增加的消費者物件,類似於觀察者模式 那是不是可以改為,handler 中,持有消費者物件...