RocketMQ角色详解之NameServer

一、NameServer的功能

NameServer是整个消息队列中的状态服务器,集群的各个组件通过它来了解全局的信息 。

需要了解的两个知识:

  • 热备份: NamServer可以部署多个,相互之间独立,其他角色同时向多个NameServer 机器上报状态信息。
  • 心跳机制: NameServer 中的 Broker、 Topic等状态信息不会持久存储,都是由各个角色定时上报并存储到内存中,超时不上报的话, NameServer会认为某个机器出故障不可用了,其他组件会把这个机器从可用列表里移除 。 (每 10秒检查一次,时间戳超过 2分钟则认为Broker已失效。)

二、NameServer的集群状态存储结构

集群的状态就保存于五个变量中,NameServer 的主要工作就是维护这五个变量中存储的信息。

1.private final HashMap<String, List> topicQueueTable

 Key 是 Topic 的名称,它存储了所有Topic 的属性信息 。
Value 是个 QueueData 队列,队里的长度等于这个 Topic 数据存储的 MasterBroker的个数。
QueueData里存储着 Broker的名称、 读写queue的数量、 同步标识等。

2.private final HashMap<String, BrokerData> Broker- AddrTable

这个结构存储着一个 BrokerName 对应的属性信 息,
包括所属的 Cluster 名称,Master Broker 和多个 Slave Broker 的地址信息 。

3.private final HashMap<String, Set> ClusterAddrTable

存储的是集群中 Cluster 的信息
Cluster 名称对应一个由 BrokerName组成的集合

4.private final HashMap<String, BrokerLivelnfo> Broker- LiveTable

BrokerLiveTable 存储的内容是这台 Broker机器的实时状态,
包括上次更新状态的时间戳, NameServer会定期检查这个时间戳,超时没有更新就认为这个 Broker无效了,将其从 Broker列表里清除。

5.private fina l HashMap<String , List> filterServerTable

Filter Server是过滤服务器,是 RocketMQ 的一种服务端过滤方式。
一个Broker可以有一个或多个Filter Server。 
Key 是 Broker 的地址
Value 是和这个 Broker关联的多个 Filter Server 的地址 。

三、为什么不用已有的Zookeeper?

ZooKeeper 的功能很强大,包括自动 Master 选举等, RocketMQ 的架构设计决定了它不需要进行 Master选举,用不到这些复杂的功能,只需要一个轻量级的元数据服务器就足够了 。
中间件对稳定性要求很高, RocketMQ的 NameServer只有很少的代码,容易维护,所以不需要再依赖另一个中间件,从而减少整体维护成本 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜鹊先生Richard

随缘~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值