之前看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 版权协议,转载请附上原文出处链接和本声明。