MQ順序消費解決方案

2021-10-24 06:47:16 字數 1161 閱讀 9952

1.順序錯亂的常見原因 :

訊息傳送:多執行緒並行傳送,有順序的訊息被寫入到不同的分割槽,異常重試。 

訊息消費:多消費者並行消費,或消費者內部啟用多執行緒消費。異常重試。 

2.為什麼要保證訊息的順序 :

如果業務上通過訊息傳送的資料是有前後順序關係時,則必須保證訊息的順序。 

例如:通過mq同步資料時,如果增、改、刪的順序在同步時變為刪、改、增,資料將不被刪除。 

1、rocketmq的順序訊息

1.rocketmq中的順序訊息分為:全域性順序訊息和分割槽順序訊息。 

2.全域性順序訊息:所有訊息存在同乙個topic的同乙個分割槽下,消費時同一時刻只有乙個消費者消費。 

3.分割槽順序訊息:訊息按分片鍵拆分到不同分割槽上,消費時,同一分割槽,同一時刻只有乙個消費者。

2、利用版本號保證順序

1.訊息的順序需要選定乙個分組鍵,訊息的順序基於此分組鍵來進行分組排序。 

2.訊息傳送時,附加上訊息的版本號或順序號。

3.訊息消費時,查詢訊息所在分組當前的版本號,並與當前訊息的版本號比對。 

4.如果當前訊息的版本號<=分組的版本號,則丟棄此訊息。否則消費此訊息。 

5.訊息消費成功,更新分組的當前版本號。

3、自研分割槽順序消費

1.通過zk協調生產者與消費者。 

2.生產者在啟動時,將佇列的分片資訊註冊到zk上傳送訊息時按分片鍵將訊息拆分到不同佇列上。 

3.生產者傳送訊息時,根據分片鍵,將訊息傳送到不同的佇列上。 

4.消費者啟動時從zk拉取佇列分片資訊,選擇無消費者的分片進行監聽,並將監聽狀態註冊到zk上。

MQ中保證訊息不被重複消費解決方案

在網路延遲傳輸中,會造成進行mq的訊息重試,在重試的過程中,可能會引用訊息的重發消費 在客戶端 中,由於程式設計師大意,訊息沒有簽收,或者事務沒有提交等,都會有可能造成重發消費 方案一 如果訊息是做資料庫的插入操作,那個給這個訊息做個唯一主鍵,那麼就散出現重複消費的情況,就會導致主鍵衝突,避免資料庫...

Kafka重複消費解決方案

1.問題背景 某服務 用了springboot spring kafka 處理kafka訊息時,發現每條訊息處理時間長達60 秒。幾百條訊息處理完後,又重新從第一條開始重複消費。2.原因分析 kafka消費者有兩個配置引數 max.poll.interval.ms 兩次poll操作允許的最大時間間隔...

佇列訊息重複消費解決

其實這個很常見的乙個問題,這倆問題基本可以連起來問。既然是消費訊息,那肯定要考慮考慮會不會重複消費?能不能避免重複消費?或者重複消費了也別造成系統異常可以嗎?這個是mq領域的基本問題,其實本質上還是問你使用訊息佇列如何保證冪等性,這個是你架構裡要考慮的乙個問題。要考慮的實際生產上的系統設計問題。首先...