1.发生rebanlance的背景:

当kafak的分区进行了调整 或者 kafak的消费者组中的消费者的数量进行了调整时,会触发kafak的rebanlance机制,kafak会重新平衡消费者组中消费者负责读取的分区,确保消费者们都能参与到分区的处理中

Rebalance 机制的目标是尽量均匀地分配分区给消费者,以提高整体的消费者组性能

2.重平衡的触发条件

重平衡的触发条件主要有三个:

  • 消费者组内成员发生变更,这个变更包括了增加和减少消费者(注意:这里的减少有很大的可能是被动的,可能是某个消费者崩溃退出了)
  • 主题的分区数发生变更,kafka目前只支持增加分区,当增加的时候就会触发重平衡
  • 订阅的主题发生变化,当消费者组使用正则表达式订阅主题,而恰好又新建了对应的主题,就会触发重平衡

3.重平衡的风险

重平衡的风险:在重平衡的过程中会导致kafka服务处于不可用状态

4.重平衡的方式

  • Round Robin(轮询):会采用轮询的方式将当前所有的分区依次分配给所有的consumer;
  • Range(平均分配):首先会计算每个consumer可以消费的分区个数,然后按照顺序将指定个数范围的分区分配给各个consumer;
  • Sticky(粘性分配):这种分区策略是最新版本中新增的一种策略,其主要实现了两个目的:

    • 将现有的分区尽可能均衡的分配给各个consumer,存在此目的的原因在于Round Robin和Range分配策略实际上都会导致某几个consumer承载过多的分区,从而导致消费压力不均衡;
    • 如果发生再平衡,那么重新分配之后在前一点的基础上会尽力保证当前未宕机的consumer所消费的分区不会被分配给其他的consumer上;
最后修改:2023 年 12 月 14 日
如果觉得我的文章对你有用,请随意赞赏