消息隊列的面試題5


 

1、面試題

 

如何保證消息的順序性?

 

2、面試官心里分析

 

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

 

3、面試題剖析

 

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

 

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

 

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

 

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

 

1rabbitmq:一個queue,多個consumer,這不明顯亂了

 

2kafka:一個topic,一個partition,一個consumer,內部多線程,這不也明顯亂了

 

 

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

 

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

 

 

2kafka:一個topic,一個partition,一個consumer,內部單線程消費,寫N個內存queue,然后N個線程分別消費一個內存queue即可

 

 


免責聲明!

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



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