当前位置:   article > 正文

kafka的副本分配机制_kafka副本分配策略

kafka副本分配策略

01 副本分配

副本分配的三个目标:
1. 均衡地将副本分散于各个broker上
2. 一个broker上不能有一个分区的两个副本
3. 若broker都有机架信息,尽量将各个副本分配到不同机架上的broker。 ----机架是存放服务器的地方,一个机架上有多个副本


02 不考虑机架信息

不考虑机架信息情况下:
1. 第一个分区副本通过轮询的方式挑选一个broker,进行分配。该轮询从broker列表的随机位置进行轮询。
2. 其余副本通过增加偏移进行分配。

案例: 比如有5个broker,有10个分区,每个分区有3个副本
分配过程如下
先放第一个分区的第一个副本p0,这个broker随机产生,比如是broker0,再放第一个分区的其他副本,分别放在了broker1和broker2上,第二个分区的第一个副本,放在broker1上,第二个分区的第二个和第三个副本分别是broker2和broker3上,以此类推
第五个分区的第一个副本是放在broker0,但是第二个和第三个分区是在broker2和broker3,不是在broker1和broker2,因为所有的broker已经循环一遍了,为了不让台规则产生一点随机的感觉,就有一个偏移量1,每循环一遍偏移量就加1
若没有偏移量,若broker0,broker1,broker2都宕机了,那么分片0和分片5的所有副本都没了,有了偏移量存在,分片5还会有一个副本


03 考虑机架信息

考虑到机架信息,如:三个机架(rack1,rack2,rack3),六个broker(0,1,2,3,4,5)
每个机架上有两个broker,对应关系如下
rack1:0,5
rack2:3,4
rack3:1,2

通过简单的轮询将分区分配给不同机架上的broker:
有12个分区,每个分区有3个副本
放第一遍的时候分片0-5如下图所示,到第6号分片的时候leader副本和以前一样的规律,follower副本和之前的规律是反的

每个分区副本在分配时在上一个分区第一个副本开始分配的位置右移一位。
六个broker,六个分区,正好最后一个分区的第一个副本分配的位置是该broker列表的最后一个。
如果有更多的分区需要分配,则算法开始对follower副本进行移位分配。
这主要是为了避免每次都得到相同的分配序列。
此时,如果有一个分区等待分配(分区6),这按照如下方式分配: 6 -> 0,4,2 (而不是像分区0那样重复0,3,1)

跟机架相关的副本分配中,永远在机架相关的broker列表中轮询地分配第一个副本。
其余的副本,倾向于机架上没有副本的broker进行副本分配,除非每个机架有一个副本。
然后其他的副本又通过轮询的方式分配给broker。

结果是,如果副本的个数大于等于机架数,保证每个机架最少有一个副本。否则每个机架最多保有一个副本。
如果副本的个数和机架的个数相同,且每个机架包含相同个数的broker,可以保证副本在机架和broker之间均匀分布。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/700472
推荐阅读
相关标签
  

闽ICP备14008679号