启动过程
NameServer模块下的代码结构,项目启动类为NamesrvStartup。启动过程主要做了如下几件事情。
- 读取配置文件和命令行参数
- 初始化并启动netty服务端和netty客户端
- 初始化并启动NamesrvController,注册processor,提供对外接口
代码目录结构
对外接口
processor目录下则为主要的对外接口。通过梳理NameServer的接口,以了解更多的功能细节。
ClientRequestProcessor
接口名称 | 接口功能 |
---|---|
GET_ROUTEINFO_BY_TOPIC | 按照topic名称获取路由信息 |
DefaultRequestProcessor
接口名称 | 接口功能 |
---|---|
PUT_KV_CONFIG | 修改kv配置 |
GET_KV_CONFIG | 获取kv配置 |
DELETE_KV_CONFIG | 删除kv配置 |
GET_KVLIST_BY_NAMESPACE | 获取某个namespace的kv配置 |
QUERY_DATA_VERSION | 获取缓存的broker元数据版本信息,并通过版本号判断数据是否有变化 |
REGISTER_BROKER | broker注册 |
UNREGISTER_BROKER | broker注销 |
BROKER_HEARTBEAT | broker心跳 |
GET_BROKER_MEMBER_GROUP | 按照clusterName和brokerName获取所有注册信息 |
GET_BROKER_CLUSTER_INFO | 获取所有broker注册信息 |
WIPE_WRITE_PERM_OF_BROKER | 关闭某个broker的写操作 |
ADD_WRITE_PERM_OF_BROKER | 打开某个broker的写操作 |
GET_ALL_TOPIC_LIST_FROM_NAMESERVER | 获取所有topic列表 |
DELETE_TOPIC_IN_NAMESRV | 删除topic |
REGISTER_TOPIC_IN_NAMESRV | 注册topic |
GET_TOPICS_BY_CLUSTER | 获取某个cluster下的所有topic列表 |
GET_SYSTEM_TOPIC_LIST_FROM_NS | 获取系统topic列表 |
GET_UNIT_TOPIC_LIST | 获取unit topic列表 |
GET_HAS_UNIT_SUB_TOPIC_LIST | |
GET_HAS_UNIT_SUB_UNUNIT_TOPIC_LIST | |
GET_NAMESRV_CONFIG | 读取NameServer所有的配置 |
UPDATE_NAMESRV_CONFIG | 更新NameServer的配置 |
通过这些api能大致了解到NameServer部分核心功能。NameServer主要的作用是开辟了一些内存空间,用于存放Topic与Broker的元数据信息。
核心组件
- NamesrvController
提供对外接口,心跳检查Broker注册信息是否过期 - RouteInfoManager
缓存topic、broker、queue的路由信息
队列水位
NamesrvController存在两个队列defaultThreadPoolQueue和clientRequestThreadPoolQueue,后台会定时打印这两个队列的长度和消费延迟时间。
队列 | 默认容量 | 功能 |
---|---|---|
defaultThreadPoolQueue | 10000 | 执行对于DefaultRequestProcessor的请求 |
clientRequestThreadPoolQueue | 50000 | 执行对于ClientRequestProcessor的请求 |
一些观察结果
- 4.0和5.0都Broker选主机制是有差别的,4.0没有使用Raft协议进行选主,5.0则是采用了Raft协议
- NamesrvController会定期检查Broker注册信息是否过期,超过120s未收到Broker的心跳,就会注销Broker