阿里二面:RocketMQ 集群 Broker 挂了,会造成什么影响?

当RocketMQ集群中的一个Broker挂掉,会导致Producer发送消息失败,尤其是异步和单边消息。同步消息可通过重试机制发送到其他正常Broker。启用延迟隔离策略可以减少重试带来的性能影响。对于顺序消息,全局顺序消息会受阻,局部顺序消息可能导致部分订单消息顺序性破坏。消费者在Broker挂掉时可能拉取失败,但配置从节点的集群能保证消费。消费者在主节点压力大或挂掉时可从从节点拉取消息,但需注意偏移量同步问题以防止重复消费。
摘要由CSDN通过智能技术生成

今天分享 RocketMQ 的 Broker 挂了,会带来什么影响。

面试官:你好,如果 RocketMQ 集群中的一个 Broker 挂了,会造成什么影响呢?

:Broker 挂了,首先会导致 Producer 发送消息失败。对于普通消息,Producer 同步发送的情况下会有重试机制,重试时把消息发送到其他 Broker。如下图,Broker1 宕机了,把消息发送到了 Broker2:

发送消息的逻辑其实是是一个循环,发送失败后会不断尝试重新发送,代码如下:

int timesTotal = communicationMode == CommunicationMode.SYNC ? 1 + this.defaultMQProducer.getRetryTimesWhenSendFailed() : 1;
for (; times < timesTotal; times++) {
 String lastBrokerName = null == mq ? null : mq.getBrokerName();
 MessageQueue mqSelected = this.selectOneMessageQueue(topicPublishInfo, lastBrokerName);
 if (mqSelected != null) {
  mq = mqSelected;
  try {
   sendResult = this.sendKernelImpl(msg, mq, communicationMode, sendCallback, topicPublishInfo, timeout - costTime);
   switch (communicationMode) {
    case ASYNC:
     return null;
    case ONEWAY:
     return null;
    case SYNC:
     if (sendResult.getSendStatus() != SendStatus.SEND_OK) {
         //如果发送失败了,这里会进行重试
      if (this.defaultMQProducer.isRetryAnotherBrokerWhenNotStoreOK()) {
       continue;
      }
     }

     return sendResult;
    default:
     break;
   }
  } catch (RemotingException e) {
  }//省略其他 catch
 } else {
  break;
 }                                                                                                                                                                                                              
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值