【kafka】消費者對應的分配partition分區策略

  • 一個topic有多個partition,且partition分佈在多個broker上
  • 一個消費組有多個consumer

這種設計讓一個topic的消息可以分散存儲到多個broker服務器裏的partition分區中,消費組裏面的消費者又能夠同時消費不一樣的partition分區。
解決問題:
1.實現了負載均衡(分佈在多個broker上,能夠同時對外提供服務)。
2.多消費者併發消費,提高kafka的吞吐量。服務器


消費者的分區策略:

現有兩個主題topic一、topic2,各自都有三個partition。兩個消費者併發

[topic1_partition0,topic1_partition1,topic1_partition2]
[topic2_partition0,topic2_partition1,topic2_partition2]負載均衡

  • RoundRobin 輪詢,按照消費組來份,須要消費者組裏面的全部的消費者訂閱同一個主題。
TopicAndPartition(string Topic,integer Partition);

TopicAndPartition對象,多個主題總體排序
[topic1_partition0,topic1_partition1,topic1_partition2,topic2_partition0,topic2_partition1,topic2_partition2]ide

優勢:多個消費者消費分區最多相差一個,相對均衡。設計

問題:consumer1可能徹底被分配到Topic1,Consumer2徹底消費Topic2。code

總結:輪詢是按照消費者組來劃分的,須要保證當前消費組裏面的消費者訂閱同一個topic。對象

  • Range 範圍,按照topic主題來分劃分。

consumer1 消費 topic1_partition0,topic1_partition1,
consumer2消費 topic1_partition2
consumer1再消費topic2_partition0,topic2_partition1
consumer2再消費topic2_partition2排序

問題:consumer2消費的少
總結:範圍是按照主題來劃分的。kafka

  • kafka默認採用的是range範圍string

  • 何時會觸發策略?消費者組裏面的消費者的數量發生改變的時候(增長/減小消費者),重觸發從新分配策略。
相關文章
相關標籤/搜索