1 环境如下:
2 消费流程
3 failover表现:
3.1 消息拉取异常:
2015-08-12 11:47:13,215 [PullMessageService] ERROR RocketmqClient - pullKernelImpl exception
com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <10.10.81.94:10915> failed
at com.alibaba.rocketmq.remoting.netty.NettyRemotingClient.invokeAsync(NettyRemotingClient.java:666) ~[classes/:na]
at com.alibaba.rocketmq.client.impl.MQClientAPIImpl.pullMessageAsync(MQClientAPIImpl.java:449) ~[classes/:na]
at com.alibaba.rocketmq.client.impl.MQClientAPIImpl.pullMessage(MQClientAPIImpl.java:430) ~[classes/:na]
at com.alibaba.rocketmq.client.impl.consumer.PullAPIWrapper.pullKernelImpl(PullAPIWrapper.java:237) ~[classes/:na]
at com.alibaba.rocketmq.client.impl.consumer.DefaultMQPushConsumerImpl.pullMessage(DefaultMQPushConsumerImpl.java:513) ~[classes/:na]
at com.alibaba.rocketmq.client.impl.consumer.PullMessageService.pullMessage(PullMessageService.java:82) [classes/:na]
at com.alibaba.rocketmq.client.impl.consumer.PullMessageService.run(PullMessageService.java:98) [classes/:na]
at java.lang.Thread.run(Thread.java:744) [na:1.7.0_51]
3.2 rebalance定时任务抛出异常:
2015-08-12 11:46:52,826 [RebalanceService] WARN RocketmqClient - getConsumerIdListByGroup exception, 10.10.81.94:10915 consumerTestGroup
com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <10.10.81.94:10915> failed
at com.alibaba.rocketmq.remoting.netty.NettyRemotingClient.invokeSync(NettyRemotingClient.java:641) ~[classes/:na]
at com.alibaba.rocketmq.client.impl.MQClientAPIImpl.getConsumerIdListByGroup(MQClientAPIImpl.java:625) ~[classes/:na]
at com.alibaba.rocketmq.client.impl.factory.MQClientInstance.findConsumerIdList(MQClientInstance.java:1025) [classes/:na]
at com.alibaba.rocketmq.client.impl.consumer.RebalanceImpl.rebalanceByTopic(RebalanceImpl.java:282) [classes/:na]
at com.alibaba.rocketmq.client.impl.consumer.RebalanceImpl.doRebalance(RebalanceImpl.java:248) [classes/:na]
at com.alibaba.rocketmq.client.impl.consumer.DefaultMQPushConsumerImpl.doRebalance(DefaultMQPushConsumerImpl.java:250) [classes/:na]
at com.alibaba.rocketmq.client.impl.factory.MQClientInstance.doRebalance(MQClientInstance.java:925) [classes/:na]
at com.alibaba.rocketmq.client.impl.consumer.RebalanceService.run(RebalanceService.java:49) [classes/:na]
at java.lang.Thread.run(Thread.java:744) [na:1.7.0_51]
3.3 更新offset到broker的定时任务抛出异常:
2015-08-12 11:46:49,607 [MQClientFactoryScheduledThread] ERROR RocketmqClient - updateConsumeOffsetToBroker exception, MessageQueue [topic=failoverTestTopic-v2, brokerName=broker-index-a, queueId=0]
com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <10.10.81.94:10915> failed
at com.alibaba.rocketmq.remoting.netty.NettyRemotingClient.invokeOneway(NettyRemotingClient.java:691) ~[classes/:na]
at com.alibaba.rocketmq.client.impl.MQClientAPIImpl.updateConsumerOffsetOneway(MQClientAPIImpl.java:780) ~[classes/:na]
at com.alibaba.rocketmq.client.consumer.store.RemoteBrokerOffsetStore.updateConsumeOffsetToBroker(RemoteBrokerOffsetStore.java:200) ~[classes/:na]
at com.alibaba.rocketmq.client.consumer.store.RemoteBrokerOffsetStore.persistAll(RemoteBrokerOffsetStore.java:139) ~[classes/:na]
at com.alibaba.rocketmq.client.impl.consumer.DefaultMQPushConsumerImpl.persistConsumerOffset(DefaultMQPushConsumerImpl.java:265) [classes/:na]
at com.alibaba.rocketmq.client.impl.factory.MQClientInstance.persistAllConsumerOffset(MQClientInstance.java:344) [classes/:na]
at com.alibaba.rocketmq.client.impl.factory.MQClientInstance.access$4(MQClientInstance.java:339) [classes/:na]
at com.alibaba.rocketmq.client.impl.factory.MQClientInstance$5.run(MQClientInstance.java:250) [classes/:na]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [na:1.7.0_51]
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) [na:1.7.0_51]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) [na:1.7.0_51]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.7.0_51]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_51]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_51]
at java.lang.Thread.run(Thread.java:744) [na:1.7.0_51]
3.4 定时任务
参见Failover下producer的表现的定时任务MQClientInstance.this.updateTopicRouteInfoFromNameServer
它会将topic的路由更新到MQClientInstance的brokerAddrTable中,而该变量存储的是brokerName和broker地址的映射关系。
从DefaultMQPushConsumer消费流程的消息拉取流程的3.1可知:
拉取消息前会根据broker_name获取broker地址,那么最终会获取到broker的slave地址。
故消息会从slave上拉取。