写点什么

深入了解 RocketMQ 之 NameServer

用户头像
邱学喆
关注
发布于: 4 小时前
深入了解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 服务器相对于比较简单,存储元数据的地方;没有过多复杂的地方;


发布于: 4 小时前阅读数: 3
用户头像

邱学喆

关注

计算机原理的深度解读,源码分析。 2018.08.26 加入

在IT领域keep Learning。要知其然,也要知其所以然。原理的爱好,源码的阅读。输出我对原理以及源码解读的理解。个人的仓库:https://gitee.com/Michael_Chan

评论

发布
暂无评论
深入了解RocketMQ之NameServer