如何保證訊息佇列訊息的順序性

2021-10-23 12:10:40 字數 791 閱讀 1247

舉個例子:

有乙個mysql binlog 同步系統,壓力是非常大的,日同步資料達到了上億級別,就是將資料從乙個 mysql 庫當中原封不動的同步到另乙個 mysql 庫當中去(比較常見的就是大資料組需要幹的事情)。

假設在 mysql 當中增刪改了一條資料,對應的生產了三條 增刪改的 binlog 日誌,接著這三條 binlog 傳送到 mq 裡面去,然後進行消費。這時候就得保證訊息佇列的順序性了。不然本來是:增加、修改、刪除;你愣是換了順序給執行成刪除、修改、增加,不全錯了麼。

再來看看順序會錯亂的倆場景:

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

Kafka 訊息佇列如何保證順序性?

主要思路 相同key值的訊息寫入同乙個partition partition內的訊息是有序的 乙個partition的訊息只會被乙個消費者消費。如果乙個消費者是多個執行緒消費,則需要把pull來的訊息按照key值寫入不同的記憶體佇列中,相同key值的訊息寫入同乙個記憶體佇列 記憶體佇列內的訊息是有序...

如何保證訊息的順序性?

我舉個例子,我們以前做過乙個 mysql binlog 同步的系統,壓力還是非常大的,日同步資料要達到上億,就是說資料從乙個 mysql 庫原封不動地同步到另乙個 mysql 庫裡面去 mysql mysql 常見的一點在於說比如大資料 team,就需要同步乙個 mysql 庫過來,對公司的業務系統...

如何保證訊息的順序性?

面試題 如何保證訊息的順序性?面試官心理分析 其實這個也是用 mq 的時候必問的話題,第一看看你了不了解順序這個事兒?第二看看你有沒有辦法保證訊息是有順序的?這是生產系統中常見的問題。面試題剖析 我舉個例子,我們以前做過乙個 mysql binlog 同步的系統,壓力還是非常大的,日同步資料要達到上...