RocketMQ读书笔记4——NameServer(MQ的协调者)

【NameServer简述】

  对于一个消息队列集群来说,系统由很多机器组成,每个机器的角色、IP地址都不相同,而且这些信息是变动的(如在某些情况下,会有新的Producer或Consumer加入)。

  NameServer的存在主要是为了解决这类问题,由NameServer维护这些配置信息、状态信息,其他角色都通过NameServer来协同执行。

【NameServer的功能】

  NameServer是整个消息队列中的状态服务器,集群的各个组件通过它来了解全局的信息。各个角色的机器要定时向NameServer上报自己的状态,如果超时未上报,NameServer会认为某个机器出故障不可用了,其他的组件会把这个机器从可用列表中删除。

  NameServer可以部署多个,相互之间独立,其他角色同时向多个NameServer上报状态信息,从而达到热备份的目的。NameServer本身是无状态的,也就是说NameServer中的Broker、Topic等信息都不会持久化,都是由各个角色定时上报并存储到内存中的(NameServer支持参数的持久化,一般用不到)。

【集群状态的存储结构】

在RouterInfoManager中,有5个变量,集群的状态就保存在这5个变量中。

    /**
     * 存储所有Topic的属性信息
     */
    private final HashMap<String/* topic */, List<QueueData>> topicQueueTable;
    /**
     *  存储BrokerName对应的属性信息
     */
    private final HashMap<String/* brokerName */, BrokerData> brokerAddrTable;
    /**
     * 存储集群的信息
     */
    private final HashMap<String/* clusterName */, Set<String/* brokerName */>> clusterAddrTable;
    /**
     * 存储Broker机器的实时状态
     */
    private final HashMap<String/* brokerAddr */, BrokerLiveInfo> brokerLiveTable;
    /**
     * 存储过滤服务器信息
     */
    private final HashMap<String/* brokerAddr */, List<String>/* Filter Server */> filterServerTable;
扫描二维码关注公众号,回复: 4295085 查看本文章

猜你喜欢

转载自www.cnblogs.com/HigginCui/p/10041825.html