【RocketMq】(3) - NameServer原理分析

62 阅读1分钟

“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情

NameServer内存原理剖析

  • NameServer集群之间是没有通信的,broker会注册到每一个NameServer上,生产/消费者从任意一个NameServer中都能获取到broker路由信息。

  • broker每隔30s向NameServer发送一次心跳,而NameServer后台会运行一个线程,每隔10s检测120s内broker有没有向NameServer发送心跳,如果没有就会摘除broker。

image.png

NameServer内存中核心数据模型

nameserver内存模型:

clusterAddrTable:{
  RuYuanRocketMqCluster:[RuYuanBroker01,RuYuanBroker02]
}
brokerAddrTable:[{
  RuYyuanBroker01:{
  cluster:RuYuanRocketMqCluster
  BrokerAddrs:[0:xx.xx.xx.xx:xxx,1:xx.xx.xx.xx:xxx]
  },
  RuYuanBroker02:{
  cluster:RuYuanRocketMqCluster
  BrokerAddrs:[0:xx.xx.xx.xx:xxx,1:xx.xx.xx.xx:xxx]
  }
}]
brokerLiveTable:{
  xx.xx.xx.xx:xxx:{
  lastUpdateTimestamp:24561355,
  haServerAddr:xx.xx.xx.xx:xxx
  },
  xx.xx.xx.xx:xxx:{
  lastUpdateTimestamp:24561355,
  haServerAddr:xx.xx.xx.xx:xxx
  }
}
topicQueueTable:{
  RuYuanTopic:{
    {
      brokerName:RuYuanBroker01,
      readQueueNums:4,
      writeQueueNums:4
    },
    {
      brokerName:RuYuanBroker02,
      readQueueNums:4,
      writeQueueNums:4
    }
  }
}

image.png

Producer发送消息机制分析

producer在发送消息时会指定topic,producer根据topic每隔30s到NameServer上拉取topic的路由信息并缓存到本地,通过topic获取到的queues,再根据queues获取broker。

  • producer通过queues进行负载均衡(轮询)

  • producer消息发送失败会默认重试一次,并且切换到不同的broker节点上。(故障重试机制、故障退避机制)