NameServer 路由元数据|学习笔记

简介: 快速学习 NameServer 路由元数据

开发者学堂课程【RocketMQ 知识精讲与项目实战(第三阶段)NameServer 路由元数据】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/704/detail/12464


NameServer 路由元数据


内容介绍:

一、前言

一、路由元信息


一、前言

NameServer的主要作用是为消息的生产者和消息消费者提供关于主题Topic的路由信息,那么NameServer需要存储路由的基础信息,还要管理Broker节点,包括路由注册、路由删除等。


二、路由元信息

代码: RoutelnfoManager

private final HashMap<String/* topic */,List<QueueData>> topicQueueTable;

private fina7 HashMap<String/* brokerName */,Brokerbata> brokerAddrTable;

private fina1 HashMap<String/* clusterName*/, set<String/* brokerName */>> c1usterAddrTable;

private fina1 HashMap<String/* brokerAddr */,BrokerLiveInfo> brokerLiveTable;

private final HashMap<String/* brokerAddr*/,List<string>/* Filter server */> filterserverTable;

1、topicQueueTable: Topic消息队列路由信息,消息发送时根据路由表进行负载均衡

topicQueueTable示例数据:

topicQueueTable:{

"topic1":{

brokerName":"broker-a" ,

"readQueueNums":4,

"perm":6,//读写权限,具体含义请参考PermName

"topicsynFlag" :() //topic同步标记,具体含义请参考TopicsysFlag

},

{

"brokerName":"broker-b",

"readQueueNums":4,

"readQueueNums":4,

"perm" : 6, //读写权限,具体含义请参考PermName

"topicsynFlag" :()  //topic同步标记,具体含义请参考TopicsysFlag

}

},

"topic other" : [ ]

}

Key是“topic1”,值是集合,集合中存的是每个broker的信息,包括broker的名字、权限信息等,我们发现这个示例中仅仅只有broker的name,broker的信息配置是在brokerAddrTable。

2、brokerAddrTable: Broker基础信息,包括brokerName、所属集群名称、主备Broker地址

brokerAddrTable : {

"broker-a" : {

"cluster: "c1",

"brokerName" : "broker-a" ,

"brokerAddrs" : {

0: ""192.168.56.1:10000"

1: ""192.168.56.2:10000"

}

},

broker-b" : {

"cluster" : "c1" ,

"brokerAddrs" :{

0 : "192.168.56.3:10000",1:"192.168.56.4 :10000"

}

}

从以上内容可以得到broker的地址

3、clusterAddrTable: Broker集群信息,存储集群中所有Broker名称

clusterAddrTable: {

“c1”: [{"broker-a", "broker-b"}]

}

“c1”集群名,{"broker-a", "broker-b"}集群当中每一个节点的名字

4、brokerLiveTable: Broker状态信息,NameServer每次收到心跳包是会替换该信息

brokerLiveTable示例数据:

brokerLiveTable : {

"192.168.56.1:10000": {

"lastUpdateTimestmp" :1518270318980,

"dataversion" : versionObl,

"channel" : channelobj,

"haserverAddr" : "192.168.56.2:10000"

}

"192.168.56.2:10000" : {

"lastUpdateTimestamp" :1518270318980,

"dataversion" : versionobl,

"channel" : channelobj,

"haserverAddr" : ""

包含属性:"192.168.56.1:10000"这个地址的broker上次上报的时间。在NameServer当中维护的是如上面内容的心跳路由表,NameServer每隔10s会扫描路由表,查看这个表中broker的lastupdatetimestamp是否有长时间未更新的状况,如果有一个broker长时间未更新,NameServer会将这个路由表中的这个broker删除,还会将其他相关路由中的信息删除。

5、filterServerTable: Broker上的FilterServer列表,用于类模式消息过滤。

注意:RocketMQ基于定于发布机制,一个Topic拥有多个消息队列,一个Broker为每一个主题创建4个读队列和4个写队列。多个Broker组成一个集群,集群由相同的多台Broker组成Master-Slave架构,brokerld为o代表Master,大于0为Slave。BrokerLivelnfo中的lastUpdateTimestamp存储上次收到Broker心跳包的时间。

相关文章
|
6月前
|
人工智能 算法 NoSQL
LRU算法的Java实现
LRU(Least Recently Used)算法用于淘汰最近最少使用的数据,常应用于内存管理策略中。在Redis中,通过`maxmemory-policy`配置实现不同淘汰策略,如`allkeys-lru`和`volatile-lru`等,采用采样方式近似LRU以优化性能。Java中可通过`LinkedHashMap`轻松实现LRUCache,利用其`accessOrder`特性和`removeEldestEntry`方法完成缓存淘汰逻辑,代码简洁高效。
300 0
|
3月前
|
缓存 Java 数据安全/隐私保护
Java动态代理详解
动态代理是Java中一种强大且灵活的设计模式,它允许在运行时创建代理对象,从而实现对目标对象方法的拦截与增强。通过动态代理,开发者可以在不修改原始代码的情况下,增强对象功能,适用于日志记录、事务管理、权限控制等多个场景。
|
设计模式 缓存 安全
Java设计模式的单例模式应用场景
Java设计模式的单例模式应用场景
265 4
|
9月前
|
存储 NoSQL 前端开发
美团面试:手机扫描PC二维码登录,底层原理和完整流程是什么?
45岁老架构师尼恩详细梳理了手机扫码登录的完整流程,帮助大家在面试中脱颖而出。该过程分为三个阶段:待扫描阶段、已扫描待确认阶段和已确认阶段。更多技术圣经系列PDF及详细内容,请关注【技术自由圈】获取。
|
5月前
|
消息中间件 存储 Kafka
一文带你从入门到实战全面掌握RocketMQ核心概念、架构部署、实践应用和高级特性
本文详细介绍了分布式消息中间件RocketMQ的核心概念、部署方式及使用方法。RocketMQ由阿里研发并开源,具有高性能、高可靠性和分布式特性,广泛应用于金融、互联网等领域。文章从环境搭建到消息类型的实战(普通消息、延迟消息、顺序消息和事务消息)进行了全面解析,并对比了三种消费者类型(PushConsumer、SimpleConsumer和PullConsumer)的特点与适用场景。最后总结了使用RocketMQ时的关键注意事项,如Topic和Tag的设计、监控告警的重要性以及性能与可靠性的平衡。通过学习本文,读者可掌握RocketMQ的使用精髓并灵活应用于实际项目中。
4320 9
 一文带你从入门到实战全面掌握RocketMQ核心概念、架构部署、实践应用和高级特性
|
Kubernetes 云计算 Docker
【K8S系列】深入解析 k8s:入门指南(一)
【K8S系列】深入解析 k8s:入门指南(一)
864 0
|
11月前
|
Prometheus 监控 Cloud Native
无痛入门Prometheus:一个强大的开源监控和告警系统,如何快速安装和使用?
Prometheus 是一个完全开源的系统监控和告警工具包,受 Google 内部 BorgMon 系统启发,自2012年由前 Google 工程师在 SoundCloud 开发以来,已被众多公司采用。它拥有活跃的开发者和用户社区,现为独立开源项目,并于2016年加入云原生计算基金会(CNCF)。Prometheus 的主要特点包括多维数据模型、灵活的查询语言 PromQL、不依赖分布式存储、通过 HTTP 拉取时间序列数据等。其架构简单且功能强大,支持多种图形和仪表盘展示模式。安装和使用 Prometheus 非常简便,可以通过 Docker 快速部署,并与 Grafana 等可
5874 2
|
Java Spring
成功解决Initialization failed for ‘https://start.spring.io‘ Please check URL, network and proxy settings
这篇文章提供了解决Spring Initializr网站初始化失败问题的方法,包括检查URL、网络和代理设置。
成功解决Initialization failed for ‘https://start.spring.io‘ Please check URL, network and proxy settings
|
存储 Java 测试技术
阿里巴巴java开发手册
这篇文章是关于阿里巴巴Java开发手册的整理,内容包括编程规约、异常日志、单元测试、安全规约、MySQL数据库使用以及工程结构等方面的详细规范和建议,旨在帮助开发者编写更加规范、高效和安全的代码。
|
存储 消息中间件 关系型数据库
一文读懂RocketMQ的存储机制
一文读懂RocketMQ的存储机制
2558 1