深入了解 RocketMQ 之 NameServer
一. 概述
名称服务充当路由消息的提供者。生产者或消费者能够通过名字服务查找各主题相应的 Broker IP 列表。多个 Namesrv 实例组成集群,但相互独立,没有信息交换。
二. 数据结构
2.1 KVConfigManager
KVConfigManager 是存放有关 kv 信息的缓存对象;从类图来看,其采用了二维度的结构,先 Namespace 域名空间,接着 key;
2.2 RouteInfoManager
存放路由信息,主要是 Broker 的数据信息;数据结构如下:
现在来介绍 RouteInfoManager 类中的属性内容:
topicQueueTable 存放有关 topic 的配置信息
brokerAddrTable 存放 Broker 集群中主从信息,其是按照 Broker 名称来划分
clusterAddrTable 存放集群名称下所有的 Broker 名称集合信息;一般会与 brokerAddrTable 配合使用
brokerLiveTable 存放 Broker 地址以及对应的 Socket 和 HA 地址信息;
filterServerTable 存放 Broker 地址以及对应的 FilterServer 信息
三. 功能模块
KV 相关的接口,基本是从 KVConfigManager 去获取
PUT_KV_CONFIG 保存 KV 配置信息
GET_KV_CONFIG 获取 KV 配置信息
DELETE_KV_CONFIG 删除 KV 配置信息
GET_KVLIST_BY_NAMESPACE 获取 KV 列表
从 RouteInfoManager 对象中获取数据
QUERY_DATA_VERSION 查询数据版本信息
REGISTER_BROKER 注册 Brroker
UNREGISTER_BROKER 注销 Brroker
GET_ROUTEINFO_BY_TOPIC 根据 Topic 获取路由信息
GET_BROKER_CLUSTER_INFO 获取 Broker 集群信息
WIPE_WRITE_PERM_OF_BROKER 清除对应 topic 下的写权限
GET_ALL_TOPIC_LIST_FROM_NAMESERVER 获取所有 Topic 列表
DELETE_TOPIC_IN_NAMESRV 删除 Topic
GET_TOPICS_BY_CLUSTER 根据集群查找 Topic 集合
GET_SYSTEM_TOPIC_LIST_FROM_NS 查询系统 Topic 列表
GET_UNIT_TOPIC_LIST 获取带有 FLAG_UNIT 的 topic 列表
GET_HAS_UNIT_SUB_TOPIC_LIST 获取带有 FLAG_UNIT_SUB 标记的 topic 列表
GET_HAS_UNIT_SUB_UNUNIT_TOPIC_LIST 获取不带有 FLAG_UNIT 且带有 FLAG_UNIT_SUB 的 topic 列表
更新 NamesrvController 中的 Configuration 对象信息;
UPDATE_NAMESRV_CONFIG 更新 nameserver 配置
GET_NAMESRV_CONFIG 获取 nameserver 配置
四. 后台线程
每个 10 秒,会定时清理与 Broker 的无效连接,该连接只要超过 2 分钟,没有在使用,则关闭该连接;
每个 10 分钟,会定时打印 KV 的配置信息;
五. 总结了
NameServer 服务器相对于比较简单,存储元数据的地方;没有过多复杂的地方;
版权声明: 本文为 InfoQ 作者【邱学喆】的原创文章。
原文链接:【http://xie.infoq.cn/article/fffb1ac4558ba868ff3a4284b】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论