Kafka面试小结九:kafka的rebalance机制

目录

一、Reblance是什么

二、Reblance触发的时机

三、Reblance的执行流程

第一阶段:选择组协调器

第二阶段:加入消费组JOIN GROUP

第三阶段( SYNC GROUP)

四、分区分配的策略有哪些


一、Reblance是什么

        今天主要分享一下 kafka 的 rebalance,在 kafka 中,rebalance 是一个十分重要的概念,很多时候引发的一些问题可能都是由于 rebalance 引起的,rebalance 也就是再均衡,顾名思义,再均衡就是再次负载均衡,下面会对再均衡进行一个详细的描述。

二、Reblance触发的时机

        当kafka感知到存在让分区和消费者分配不均匀的事情发生时,就会触发Reblance,来保证分区和消费者再次平衡。那么那些事情会触发Reblance呢?或者说那些事情会导致分区和消费者分配不均匀呢?主要有三种:

  1. 消费者组消费的分区个数发生变化。
  2. 消费者组消费的主题个数发生变化。
  3. 消费者组内的消费者个数发生变化。

        其实第2种情况,本质上是第1种情况的一个特例,消费组消费的主题个数发生变化,体现到消费组中的消费者身上,就是费配到消费者上的分区个数发生了变化。

三、Reblance的执行流程

当有消费者加入消费组时,消费者、消费组及组协调器之间会经历以下几个阶段。

第一阶段:选择组协调器

组协调器GroupCoordinator:每个consumer group都会选择一个broker作为自己的组协调器coordinator,负责监控这个消费组里的所有消费者的心跳,以及判断是否宕机,然后开启消费者rebalance。

consumer group中的每个consumer启动时会向kafka集群中的某个节点发送 FindCoordinatorRequest 请求来查找对应的组协调器GroupCoordinator,并跟其建立网络连接。

组协调器选择方式:

consumer消费的offset要提交到__consumer_offsets的哪个分区,这个分区leader对应的broker就是这个consumer group的coordinator

第二阶段:加入消费组JOIN GROUP

在成功找到消费组所对应的 GroupCoordinator 之后就进入加入消费组的阶段,在此阶段的消费者会向 GroupCoordinator 发送 JoinGroupRequest 请求,并处理响应。然后GroupCoordinator 从一个consumer group中选择第一个加入group的consumer作为leader(消费组协调器),把consumer group情况发送给这个leader,接着这个leader会负责制定分区方案。

第三阶段( SYNC GROUP)

consumer leader通过给GroupCoordinator发送SyncGroupRequest,接着GroupCoordinator就把分区方案下发给各个consumer,他们会根据指定分区的leader broker进行网络连接以及消息消费。

四、分区分配的策略有哪些

        

主要有三种rebalance的策略:range()、round-robin(轮询)、sticky(粘性)

Kafka 提供了消费者客户端参数partition.assignment.strategy 来设置消费者与订阅主题之间的分区分配策略。默认情况为range分配策略。

假设一个主题有10个分区(0-9),现在有三个consumer消费:

(1)range策略就是按照分区序号排序(范围分配),假设 n=分区数/消费者数量 = 3, m=分区数%消费者数量 = 1,那么前 m 个消费者每个分配 n+1 个分区,后面的(消费者数量-m )个消费者每个分配 n 个分区。

比如分区0~3给一个consumer,分区4~6给一个consumer,分区7~9给一个consumer。

(2)round-robin策略就是轮询分配

比如分区0、3、6、9给一个consumer,分区1、4、7给一个consumer,分区2、5、8给一个consumer

(3)sticky策略初始时分配策略与round-robin类似,但是在rebalance的时候,需要保证如下两个原则。

分区的分配要尽可能均匀 。
分区的分配尽可能与上次分配的保持相同。
当两者发生冲突时,第一个目标优先于第二个目标 。这样可以最大程度维持原来的分区分配的策略。比如对于第一种range情况的分配,如果第三个consumer挂了,那么重新用sticky策略分配的结果如下:

consumer1除了原有的0~3,会再分配一个7
consumer2除了原有的4~6,会再分配8和9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

之乎者也·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值