1. 程式人生 > >kafka的分割槽在broker上的分配方式

kafka的分割槽在broker上的分配方式

首先,這個過程與分割槽在rebalance是不一樣的。Rebalance是發生在消費者群組中,為了將一個topic中的分割槽分配給某一個消費者的演算法。

問題背景

假設現在的kafka叢集中有4個broker,現在需要建立一個包含5個partition的topic,複製因子是2,那麼這些分割槽以及副本在這4個broker上如何分配的呢?

問題分析

首先,我們要明確進行分割槽分配的目標是什麼?
1. 保證所有的分割槽以及副本可以均衡在分佈上所有的broker上
2. 保證同一個分割槽及其副本儘量不要分佈在同一個broker上

那麼,話不多說,我們直接來模擬一下這個分配的過程吧。

過程模擬

預備階段

  • 將所有的broker進行排序,可以按id進行排序,得到b1,b2,b3,b4
  • 5個分割槽,分別p1,p2,p3,p4,p5
  • 分割槽的副本,比如p1的副本我們記為p1-1,加上p1,正好兩個副本

那麼,接下來,我們就可以進行分配了。

  • 隨機選擇一個broker,比如選到了b2,然後將p1分配給b2,p2分配到b3,p3分配到b4,p4分配到b1,p5分配到b2,至此,所有分割槽的首領分割槽已經分配結束了;
  • 從每個分割槽的首領分割槽開始,p1分配在b2,所以p1-1分配在b3
  • p2分配在b3,所以p2-1分配在b4;p3分配在b4,所以p3-1分配在b1;p4分配在b1,所以p4-1分配在b2;p5分配在b2,所以p5-1分配在b3

至此,分割槽的分配就結束了。最後的結果是
b1:{p3-1,p4}
b2:{p4-1,p5,p1}
b3:{p5-1,p1-1,p2}
b4:{p2-1,p3}