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}

猜你喜欢

转载自blog.csdn.net/Shannon076/article/details/81301217