简述RocketMQ Consumer 端的负载均衡机制 ?

RocketMQ Consumer端的负载均衡机制主要依赖于在Consumer端进行消息拉取的机制来实现。

在RocketMQ中,Consumer端的两种消费模式(Push/Pull)都是基于拉模式来获取消息的。在Push模式下,消息拉取线程在从服务器拉取到一批消息后,提交到消息消费线程池后,“马不停蹄”的继续向服务器再次尝试拉取消息。如果未拉取到消息,则延迟一下又继续拉取。

在两种基于拉模式的消费方式(Push/Pull)中,均需要Consumer端知道从Broker端的哪一个消息队列中去获取消息。因此,有必要在Consumer端来做负载均衡,即Broker端中多个MessageQueue分配给同一个ConsumerGroup中的哪些Consumer消费。

当有新的Consumer实例加入Consumer Group时,会触发一次负载均衡,根据queue的数量和实例的数量平均分配queue给每个实例;当有实例下线的时候,也会重新触发负载均衡,这时候原来分配到的queue将分配到其他实例上继续消费。这样就可以起到水平扩展的消费能力的作用。

发表评论

后才能评论