ROCKETMQ 主从切换机制

  • Post author:
  • Post category:其他


之前看rocketmq,然后在想一个问题,就是一主一从的集群结构中,如果master宕机了,consumer这边是怎么选择的,按照官方说明中,master挂了,但是slave中的消息仍然可以被consume消费到,然后master恢复后,master的消息又可以被消费到。

那么问题来了,consumer是怎么从master上面切换到slave上继续消费消息呢?首先明确一点,master宕机,就意味着这个broker不再写入,但是因为slave还在,所以还可以继续读。所以我们看一下consumer是怎么选择的?其实还有个疑问,就是master宕机后,会体现到负载均衡服务的重新分配吗?

先说第一个问题,跟代码进去:

PullConsumer:




PullResult pullResult =
                        consumer.pullBlockIfNotFound(mq, null, getMessageQueueOffset(mq), 32);

一路next 到  
pullAPIWrapper.pullKernelImpl

然后发现,消费者消费从哪个服务器上面拉信息是通过这样确定的:

public FindBrokerResult findBrokerAddressInSubscribe(
    final String brokerName,
    final long brokerId,
    final boolean onlyThisBroker
) {
    String brokerAddr = null;
    



版权声明:本文为watertofish原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。