机架信息来进行不同方式的分配;
要么整个集群都有机架信息,要么整个集群都没有机架信息; 否则抛出异常
副本分配的几个原则:
将副本平均分布在所有的 Broker 上;
partition 的多个副本应该分配在不同的...,则继续顺推到没有当前分区副本的Broker
如果分区过多,有可能nextReplicaShift就变的挺大,在算第一个跟第二个副本的间隔的时候,不用把第一个副本算进去;
假如下面起始是 5,其中经历过的间隔就是...=3的基础上,新增了一个副本=4, 原有的分配都基本没有变化, 只是在之前的分配基础上,按照顺序再新增了一个副本,见图中的 浅黄色区域 ,如果想缩小副本数量也是同样的道理;
上面预设的nextReplicaShift...BrokerList列表离元素的顺序,会影响分配结果, 这里分析的分配是指列表的顺序,不是Broker的ID
nextReplicaShift是第一个分区副本跟第二个副本间隔的Broker数量,后面的副本则与上一个副本顺推就行如果顺推遇到已经存在副本...尤其是某些主题的副本数和分区数都比较少,甚至都为 1 的情况下,所有的副本都落到了那个指定的 broker 上。