突破Java面試 9 如何保證訊息佇列的順序性

2021-09-20 21:02:26 字數 869 閱讀 8369

如何保證訊息的順序性?

mq必問話題

乙個mysql binlog同步系統,日同步資料達到上億.

應該得保證訊息按照順序執行的吧!

不然本來是:增加->修改->刪除

你楞是換了順序給執行成:刪除->修改->增加

全錯!!!

該資料同步過來,最後本該被刪除,結果你搞錯順序,最後它卻被保留下來了,資料同步出錯!

乙個queue,多個consumer,這不明顯亂了

乙個topic,乙個partition,乙個consumer,內部多執行緒,這也明顯亂了

拆分多個queue,每個queue乙個consumer

就是多一些queue而已,確實麻煩點

或者就乙個queue但是對應乙個consumer,然後這個consumer內部用記憶體佇列做排隊,然後分發給底層不同的worker來處理

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

面試系列三 如何保證訊息不被重複消費

回答這個問題,首先你別聽到重複訊息這個事兒,就一無所知吧,你先大概說一說可能會有哪些重複消費的問題。首先就是比如rabbitmq rocketmq kafka,都有可能會出現消費重複消費的問題,正常。因為這問題通常不是mq自己保證的,是給你保證的。然後我們挑乙個kafka來舉個例子,說說怎麼重複消費...

面試題 如何保證訊息的順序性

如何保證訊息的順序性?其實這個也是用mq的時候必問的,一來是看你知不知道會出現順序性的問題,二來是看你有沒有辦法保證訊息消費是順序性的,這也是生產系統中常見的問題。假如將mysql中binlog的資料使用mq同步到其他系統中,這是原本是三條按順序的增加,修改,刪除操作,因為mq的問題,造成來順序混亂...

kafka如何保證訊息有序

兩種方案 方案一,kafka topic 只設定乙個partition分割槽 方案二,producer將訊息傳送到指定partition分割槽 解析 方案一 kafka預設保證同乙個partition分區內的訊息是有序的,則可以設定topic只使用乙個分割槽,這樣訊息就是全域性有序,缺點是只能被co...