高吞吐的kafka如何保證訊息消費的有序性

2021-10-02 07:59:42 字數 593 閱讀 7543

producer端傳送的message必須指定是傳送到哪個topic,但是不需要指定topic下的哪個partition,因為kafka會把收到的message進行load balance,均勻的分布在這個topic下的不同的partition上( hash(message) % [broker數量]  )。

同組有多個消費者的時候:kafka會按照順序分配partitions,eg如果有3個消費者

partitions assigned: [abcd-2, abcd-3, abcd-0, abcd-1]

partitions assigned: [abcd-6, abcd-4, abcd-5]

partitions assigned: [abcd-7, abcd-8, abcd-9]

當同乙個key的訊息會被分配到同乙個partition中。訊息在同乙個partition處理的順序是fifo,這就保證了訊息的順序性。partition上不允許併發當消費者數量大於》partition時候,多餘的消費者會閒置不起作用

如果要保證訊息有序性,需要指定和保證key的有序性,根據key的規則分片partition

Kafka的高吞吐

kafka誕生於linkin公司。當時linkin需要對使用者和 上產生的活動資料進行處理,什麼是活動資料呢?比如頁面訪問量 使用者行為 搜尋情況等,對這些資料的分析將被應用於廣播 排序 個性化 推薦 運營監控等。這類資料有個特點,需要實時處理,最好當下使用者的一些行為資料能馬上被後台感知 計算,並...

Kafka如何保證高可用

kafka 乙個最基本的架構認識 由多個 broker 組成,每個 broker 是乙個節點 你建立乙個 topic,這個 topic 可以劃分為多個 partition,每個 partition 可以存在於不同的 broker 上,每個 partition 就放一部分資料。如果用rabbitmq來...

kafka如何保證訊息有序

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