“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情”
NameServer内存原理剖析
-
NameServer集群之间是没有通信的,broker会注册到每一个NameServer上,生产/消费者从任意一个NameServer中都能获取到broker路由信息。
-
broker每隔30s向NameServer发送一次心跳,而NameServer后台会运行一个线程,每隔10s检测120s内broker有没有向NameServer发送心跳,如果没有就会摘除broker。
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
}
}
}
Producer发送消息机制分析
producer在发送消息时会指定topic,producer根据topic每隔30s到NameServer上拉取topic的路由信息并缓存到本地,通过topic获取到的queues,再根据queues获取broker。
-
producer通过queues进行负载均衡(轮询)
-
producer消息发送失败会默认重试一次,并且切换到不同的broker节点上。(故障重试机制、故障退避机制)