负载均衡
RocketMQ的消费负载是通过queue来对消息进行分片,然后consumer消费自己对应的queue来实现。我们以如下场景为例:
- topicA有两个队列:queue1和queue2。
- 消费组groupA有一台机器:consumer1
queue分配如下图所示,由于只有一台消费者机器,所以分布在queue1和queue2的消息都被consumer1消费掉。
如果这个时候开发人员收到消息积压告警,说明一个consumer已经无法及时处理所有消息了,对于这种情况通常会选择对消费集群进行扩容。于是新增了一台机器consumer2来协助处理积压的消息。情况变成下图所示:
Rebalance
这里需要大家思考一下,rocket是如何把queue2从consumer1调整到consumer2的?这里只是一个简单的实例,真实环境下可能是十几个queue对应十几个consumer。这样的对应关系更复杂,如果新增或删除一些consumer节点都需要去重新调整消费关系。
其实rocket是通过Rebalance机制来完成queue和consumer关系的协调的。Rebalance的意思就是再平衡。Relanace机制是如何实现消费关系再平衡呢?其内部的运转机制又是如何?我们接下来一探究竟。
rocket的Re