kafka的分区再平衡

[TOC]

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

  • consumer group中的新增或删除某个consumer
  • consumer订阅的topic发生变化
  • consumer所订阅的topic发生了新增分区的行为

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

  • Round Robin:会采用轮询的方式将当前所有的分区依次分配给所有的consumer;
  • Range: range 方式是按照主题来分的,不会产生轮询方式的消费混乱问题
  • Sticky
    1. 分区分配尽量均衡,主题分区数量相差最大为1个
    2. 分区分配尽量保持和上次分区保持一致
  1. 如果第一点和第二点冲突,则第一点优先考虑

(1) RoundRobin

roundrobin 分区分配

RoundRobin 轮询方式将分区所有作为一个整体进行 hash 排序,消费者组内分配分区个数最大差别为1,是按照组来分的,可以解决多个消费者消费数据不均衡的问题。
但是,当消费者组内订阅不同主题时,可能造成消费混乱,如下图所示,consumer0 订阅主题A,consumer1 订阅主题B,将 A、B主题的分区排序后分配给消费者组,TopicB 分区中的数据可能分配到 consumer0 中。

roundrobin 分区分配-消费者组订阅多个主题

(2)Range

range 分区分配

range 方式是按照主题来分的,不会产生轮询方式的消费混乱问题。
但是,如下图所示,consumer0、consumer1 同时订阅了主题A和B,可能造成消息分配不对等问题,当消费者组内订阅的主题越多,分区分配可能越不均衡。

range 分区分配-消费者组订阅多个主题

作者:臧小晶
链接:https://juejin.cn/post/6844904050064883725
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。