1、一个 consumer group 中有多个 consumer 组成,一个 topic 有多个 partition 组成,现在的问题是,到底由哪个 consumer 来消费哪个 partition 的数据。
2、Kafka有四种主流的分区分配策略: Range、RoundRobin、Sticky、CooperativeSticky。
可以通过配置参数partition.assignment.strategy
,修改分区的分配策略。默认策略是 Range + CooperativeSticky。Kafka 可以同时使用多个分区分配策略。
代码示例:
properties.put(
"partition.assignment.strategy",
"org.apache.flink.kafka.shaded.org.apache.kafka.clients.consumer.CooperativeStickyAssignor"
);
1)Range 以及再平衡
特点:针对一个分区做排序后计算。
Range 分区分配再平衡案例
1、停止掉 0 号消费者,快速重新发送消息观看结果(45s 以内,越快越好)。
-
1 号消费者:消费到 3、4 号分区数据。
-
2 号消费者:消费到 5、6 号分区数据。
-
0 号消费者的任务会整体被分配到 1 号消费者或者 2 号消费者。
说明:0 号消费者挂掉后,消费者组需要按照超时时间 45s 来判断它是否退出,所以需要等待,时间到了 45s 后,判断它真的退出就会把任务分配给其他 broker 执行。
2、再次重新发送消息观看结果(45s 以后)。
-
1 号消费者:消费到 0、1、2、3 号分区数据。
-
2 号消费者:消费到 4、5、6 号分区数据。
说明:消费者 0 已经被踢出消费者组,所以重新按照 range 方式分配。
2)RoundRobin 以及再平衡
特点:针对所有分区做排序后轮询。
RoundRobin 分区分配再平衡案例
1、停止掉 0 号消费者,快速重新发送消息观看结果(45s 以内,越快越好)。
-
1 号消费者:消费到 2、5 号分区数据
-
2 号消费者:消费到 4、1 号分区数据
-
0 号消费者的任务会按照 RoundRobin 的方式,把数据轮询分成 0 、6 和 3 号分区数据,分别由 1 号消费者或者 2 号消费者消费。
说明:0 号消费者挂掉后,消费者组需要按照超时时间 45s 来判断它是否退出,所以需要等待,时间到了 45s 后,判断它真的退出就会把任务分配给其他 broker 执行。
2、再次重新发送消息观看结果(45s 以后)。
-
1 号消费者:消费到 0、2、4、6 号分区数据
-
2 号消费者:消费到 1、3、5 号分区数据
说明:消费者 0 已经被踢出消费者组,所以重新按照 RoundRobin 方式分配。
3)Sticky 以及再平衡
特点:尽量均匀随机的分配。
粘性分区定义:可以理解为分配的结果带有“粘性的”。即在执行一次新的分配之前,考虑上一次分配的结果,尽量少的调整分配的变动,可以节省大量的开销。
粘性分区是 Kafka 从 0.11.x 版本开始引入这种分配策略,首先会尽量均衡的放置分区到消费者上面,在出现同一消费者组内消费者出现问题的时候,会尽量保持原有分配的分区不变化。
Sticky 分区分配再平衡案例
1、停止掉 0 号消费者,快速重新发送消息观看结果(45s 以内,越快越好)。
-
1 号消费者:消费到 2、5、3 号分区数据。
-
2 号消费者:消费到 4、6 号分区数据。
-
0 号消费者的任务会按照粘性规则,尽可能均衡的随机分成 0 和 1 号分区数据,分别由 1 号消费者或者 2 号消费者消费。
说明:0 号消费者挂掉后,消费者组需要按照超时时间 45s 来判断它是否退出,所以需要等待,时间到了 45s 后,判断它真的退出就会把任务分配给其他 broker 执行。
2、再次重新发送消息观看结果(45s 以后)。
-
1 号消费者:消费到 2、3、5 号分区数据。
-
2 号消费者:消费到 0、1、4、6 号分区数据。文章来源:https://www.toymoban.com/news/detail-834590.html
说明:消费者 0 已经被踢出消费者组,所以重新按照粘性方式分配。文章来源地址https://www.toymoban.com/news/detail-834590.html
到了这里,关于【Kafka-Consumer分区分配策略】Kafka 消费者组三种分区分配策略 Range Assignor、RoundRobin Assignor、Sticky Assignor 详细解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!