写点什么

Kafka 的再平衡机制

发布于: 2021 年 04 月 03 日
Kafka的再平衡机制

 Kafka 的再平衡机制

1  什么是再平衡

所谓的再平衡,指的是在 kafka consumer 所订阅的 topic 发生变化时发生的一种分区重分配机制。一般有三种情况会触发再平衡:

  1. consumer group 中的新增或删除某个 consumer,导致其所消费的分区需要分配到组内其他的 consumer 上;

  2. consumer 订阅的 topic 发生变化,比如订阅的 topic 采用的是正则表达式的形式,如 test-*此时如果有一个新建了一个 topic test-user,那么这个 topic 的所有分区也是会自动分配给当前的 consumer 的,此时就会发生再平衡;

  3. consumer 所订阅的 topic 发生了新增分区的行为,那么新增的分区就会分配给当前的 consumer,此时就会触发再平衡。

Kafka 提供的再平衡策略主要有三种:Round Robin,Range 和 Sticky,默认使用 Range。这三种分配策略的主要区别在于:

  •  Round Robin:会采用轮询的方式将当前所有的分区依次分配给所有的 consumer;

  • Range:首先会计算每个 consumer 可以消费的分区个数,然后按照顺序将指定个数范围的分区分配给各个 consumer;

  • Sticky:这种分区策略是最新版本中新增的一种策略,其主要实现了两个目的:

1. 将现有的分区尽可能均衡的分配给各个 consumer,存在此目的的原因在于 Round Robin 和 Range 分配策略实际上都会导致某几个 consumer 承载过多的分区,从而导致消费压力不均衡;

2.如果发生再平衡,那么在重新分配前的基础上会尽力保证当前未宕机的 consumer 所消费的分区不会被分配给其他的 consumer 上;


2  Round Robin

关于 Round Robin 重分配策略,其主要采用的是一种轮询的方式分配所有的分区,该策略主要实现的步骤如下。这里我们首先假设有三个 topic:t0、t1 和 t2,这三个 topic 拥有的分区数分别为 1、2 和 3,那么总共有六个分区,这六个分区分别为:t0-0、t1-0、t1-1、t2-0、t2-1 和 t2-2。这里假设我们有三个 consumer:C0、C1 和 C2,它们订阅情况为:C0 订阅 t0,C1 订阅 t0 和 t1,C2 订阅 t0、t1 和 t2。那么这些分区的分配步骤如下:

1) 首先将所有的 partition 和 consumer 按照字典序进行排序,所谓的字典序,就是按照其名称的字符串顺序,那么上面的六个分区和三个 consumer 排序之后分别为:



2) 然后依次以按顺序轮询的方式将这六个分区分配给三个 consumer,如果当前 consumer 没有订阅当前分区所在的 topic,则轮询的判断下一个 consumer:

  •  尝试将 t0-0 分配给 C0,由于 C0 订阅了 t0,因而可以分配成功;

  • 尝试将 t1-0 分配给 C1,由于 C1 订阅了 t1,因而可以分配成功;

  • 尝试将 t1-1 分配给 C2,由于 C2 订阅了 t1,因而可以分配成功;

  • 尝试将 t2-0 分配给 C0,由于 C0 没有订阅 t2,因而会轮询下一个 consumer;

  • 尝试将 t2-0 分配给 C1,由于 C1 没有订阅 t2,因而会轮询下一个 consumer;

  • 尝试将 t2-0 分配给 C2,由于 C2 订阅了 t2,因而可以分配成功;

  • 同理由于 t2-1 和 t2-2 所在的 topic 都没有被 C0 和 C1 所订阅,因而都不会分配成功,最终都会分配给 C2。

按照上述的步骤将所有的分区都分配完毕之后,最终分区的订阅情况如下:



从上面的步骤分析可以看出,轮询的策略就是简单的将所有的 partition 和 consumer 按照字典序进行排序之后,然后依次将 partition 分配给各个 consumer,如果当前的 consumer 没有订阅当前的 partition,那么就会轮询下一个 consumer,直至最终将所有的分区都分配完毕。但是从上面的分配结果可以看出,轮询的方式会导致每个 consumer 所承载的分区数量不一致,从而导致各个 consumer 压力不均一。

发布于: 2021 年 04 月 03 日阅读数: 12
用户头像

专注于大数据技术研究 2020.11.10 加入

运营公众号:五分钟学大数据。大数据领域原创技术号,深入大数据技术

评论

发布
暂无评论
Kafka的再平衡机制