關於 kafka 消息的順序問題一二


順序就像就是 12345,任何 12354、12543、51234等都不行。

因為是 mq,所以必然涉及三個主體:發送方、消息服務器、消費方。

一、kafka 消息服務器

kafka brokers 順序接收客戶端請求,將消息順序追加到 partition 尾部,kafka 能保證單個分區里消息的順序性。

二、發送方

由第一點可知,我們只要把消息按順序發送到同一個分區就好了。但這里也存在幾個問題:

1、怎么保證要發送的消息的順序性?

對於單節點服務:使用全局唯一的 producer。

對於多節點、分布式服務,則需要全局鎖來控制涉及同一數據變更的操作(串行操作)。

2、怎么把順序的消息發送到同一個分區?

基於特定的分區策略將需要保障順序的消息路由到特定的分區,kafka 默認如果存在鍵的話,采用基於鍵的哈希模分區策略。

3、嚴格的消息順序?

配置:在接收到服務器響應之前能夠發送多少消息 max.in.flight.requests.per.connection = 1。

或者

max.in.flight.requests.per.connection <= 5

冪等:enable.idempotence = true

三、消費方

保證需要順序消費的消息由同一個線程消費。

開辟一定數量的工作線程,分別固定消費不同類別的順序消息。

 


免責聲明!

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



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