RocketMQ中Rebalance介绍

Rebalance介绍:

首先介绍一下Rebalance用来解决的问题:当一个Topic下有多个Queue时,如何分配每个Consumer Group中各个Consumer要消费的队列数量?(例如:一个Topic有16个Queue,现在有1个Group4个Consumer去消费,如何知道每个Consumer消费的个数?可不是简单的除法哦)这时候Rebalance机制就派上用场了。

其次明确触发Rebalance的场景都有哪些

发生场景

  • Consumer在启动时
  • Consumer会开一个线程每20秒执行一次Rebalance定时任务
  • Broker 每30s接受一次Consumer发送的心跳请求,判断如果有新的Consuner被启用注册时

再来了解一下Rebalance采用的平衡策略

策略

  • 平均哈希队列算法

平均哈希队列算法

range 代表当前这个 Consumer 获取到了多少个 MessageQueue,而 for 循环当中的 startIndex 代表了当前这个 Consumer 从 MessageQueue 数组的哪个位置开始取。举个例子,假设有 4 个 MessageQueue,2 个 Consumer,并且在经过排序之后,当前新启动的 Consumer 在数组中的下标是 1,即第 2 个元素,那么计算的情况就是这样:

 

不能均分时:

所以我们可以将这个均分逻辑简单总结一下:能均分就均分,不能均分就先保证每个 Consumer 都拿到相同数量的 MessgeQueue,然后再将剩下的从头开始分给每个 Consumer。

比如刚刚的 7 个 MessageQueue 分给 2 个 Consuemr,我们可以抽象地理解成:每个 Consumer 先分 3 个,然后剩下的 1 个按照 cidAll 中的顺序开始分,自然是分给排在第一位的 Consumer1 了。不过这里需要注意的是,实际上并没有先均分、再分配剩余的逻辑,上面那套复杂的计算逻辑会直接一把梭地计算到位,这里这么说只是为了方便大家理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值