码迷,mamicode.com
首页 > 其他好文 > 详细

从 AllocateMessageQueueConsistentHash 看一致性哈希

时间:2020-04-11 13:02:57      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:ons   bsp   意义   分配   个数   inf   解决   ESS   情况   

假定某消费组下有 3 个消费者,c0,c1,c2,订阅了 topic_zhang,该 topic 有 2 个 queue,分别是 q0,q1

现在我们有一个数组,按 consumer 名的哈希值大小排列:[c1,c0,c2]

先不考虑虚拟节点

技术图片

 

 q1 分配给 C0,q0 分配给 C2

技术图片

 

当 C0 下线之后, q1 分配给 C2

假定每个消费者对应 2 个虚拟节点,虚拟节点的意义是把区间切割的更离散,数组为:[c1_0,c0_0,c2_0,c1_1,c0_1,c2_1]

技术图片

 

在具体实现中,可以认为 TreeMap 就是这个数组,我们对 consumer 名进行哈希,然后放到 TreeMap 中。

注意:如果要使用一致性哈希的分配策略,需要指定消费者的 instanceName,否则使用 ip@pid 作为 clientId,每次重启消费者,clientId 会发生变化。
在消费者名不变的情况下,当消费者下线之后,再重新上线时,仍然会分配到之前的 queue

一致性哈希的意义何在,它是为了解决什么问题?

以 AllocateMessageQueueConsistentHash 为例,当消费者下线后,引起小范围的变化(因为单纯的哈希取模会导致大量的变化),当消费者重新上线后,仍然能够拿到以前的 queue。

从 AllocateMessageQueueConsistentHash 看一致性哈希

标签:ons   bsp   意义   分配   个数   inf   解决   ESS   情况   

原文地址:https://www.cnblogs.com/allenwas3/p/12678663.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!