RocketMQ NameServer 概览

news2025/8/7 6:01:57

🍊 Java学习:Java从入门到精通总结

🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想

🍊 绝对不一样的职场干货:大厂最佳实践经验指南


📆 最近更新:2022年11月18日

🍊 个人简介:通信工程本硕💪、Java程序员🌕。做过科研paper,发过专利,优秀的程序员不应该只是CRUD

🍊 点赞 👍 收藏 ⭐留言 📝 都是我最大的动力!


文章目录

  • NameServer简介
  • 选择NameServer的理由浅析

RocketMQ作为分布式的消息中间件,在设计的时候充分参考了同类型产品Kafka的架构。

Kafka的实现里,服务注册与发现功能是用ZooKeeper实现的,而RocketMQ使用的是自己开发的服务注册中心NameServer,进一步地提高了服务的可用性。

NameServer简介

在这里插入图片描述
再次回看一下RocketMQ的集群架构,里面的注册中心就是NameServer,它是一个轻量级的Topic路由注册中心,角色类似于Dubbo里的ZooKeeper,支持Broker的动态注册与服务发现,主要实现两个功能:

  • Broker管理

  • 路由信息管理

Broker管理:

NameServer接收Broker集群的注册信息并保存下来作为路由信息。此外,还会提供心跳检测机制,监测Broker是否“存活”。


路由信息管理:

NameServer会保存关于Broker集群的整个路由信息和用于客户端查询的队列信息,之后ProducerConsumer就可以通过NameServer拿到整个Broker集群的路由信息,从而进行消息的投递和消费。


此外,NameServer通常也是集群部署的方式,各个实例间不进行通信Broker向所有的NameServer都注册自己的路由信息,所以每个NameServer实例上都会保存一份完整的路由信息,当某个NameServer下线了,Broker仍然可以向其他NameServer发送路由信息,ProducerConsumer仍然可以获取到Broker的路由信息


BrokerServer:

Broker负责消息的存储、投递、查询及高可用的保证,为了实现这些功能,Broker包含了几个重要模块:

  1. 处理来自client端的请求
  2. 管理客户端(Producer / Consumer)及维护ConsumerTopic订阅信息
  3. 提供方便简单的API接口将消息存储到硬盘和查询功能
  4. 提供主从Broker之间的数据同步功能
  5. 根据特定的keyBroker中的消息进行检索,以提供消息的快速查询功能

选择NameServer的理由浅析

之前说过,RocketMQ设计之初参考的是Kafka,而Kafka是用的ZooKeeper作为自己的注册中心,提供了Master选举、分布式锁、数据发布订阅等等功能。


RocketMQ的初期版本,确实也用的是ZooKeeper,之所以更换成自己开发的NameServer,是因为RocketMQ只需要一个轻量级的元数据服务器即可,只需要保证最终一致性而不需要ZooKeeper这样的强一致性解决方案,从而从整体上减少了维护成本。


从CAP理论的角度来分析:
在这里插入图片描述
1. 一致性: NameServer集群里的实例之间不互相通信,意味着在同一时刻,不同实例上维护的元数据可能是不同的,客户端获取到的数据也可能是不一致的。

2. 可用性: 只要不是所有NameServer挂掉,其他情况下都可用。

3. 分区容错: 对于分布式架构,出现网络分区是不可避免的,只要保证部分NameServer可达,就能够获取到数据。例如:可以将NameServer部署在不同的机房里实现跨机房灾备。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

析构函数详解

析构函数1.概念与特性2.工作原理4.析构的顺序如果一个类中什么成员都没有,那么该类简称为空类。而空类中其实并不是真的什么都没有,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。构造函数:主要完成初始化工作析构函…

内网渗透神器CobaltStrike之配置与基础操作(一)

CobaltStrike简介 Cobalt Strike: C/S架构的商业渗透软件,适合多人进行团队协作,可模拟APT做模拟对抗,进行内网渗透。 Cobalt Strike 一款GUI的框架式渗透工具,集成了端口转发、服务扫描,自动化溢出,多模…

megahit源码迁移解析

megahit源码迁移大作业 在进行megahit源码迁移前需要清理自己的实验环境 1、链接鲲鹏服务器 2、进入源码存放地址/opt/portadv/portadmin/sourcecode 环境准备,清理之前实验环境后下载本次实验所需的源码 之前存在的其他文件,删除code 登录代码迁移工…

Python常见操作的时间复杂度

Python常见操作的时间复杂度 本文整理了Python中常见数据结构操作的时间复杂度,旨在帮助大家了解Python操作的性能,协助运行更快的代码。 文章目录标注方法List操作Set操作Deque操作标注方法 程序时间复杂度一般用"大O表示法(Big-O no…

windows11系统WSL2安装ubuntu20.04桌面

文章目录1. MobaXterm安装2.WSL安装xfce desktop3. 连接桌面参考链接1. MobaXterm安装 这个比较简单,没介绍 2.WSL安装xfce desktop 安装命令 sudo apt-get install xfce4-terminal sudo apt-get install xfce4安装完之后需要稍微配置一下: export …

【并发编程六】c++进程通信——信号量(semaphore)

【并发编程六】c进程通信——信号量(semaphore)一、概述二、信号量三、原理四、过程1、进程A过程2、进程B过程五、demo1、进程A2、进程B六、输出七、windows api介绍1. 创建信号量 CreateSemaphore()2. 打开信号量 OpenSemaphore()3. 等待 WaitForSingle…

力扣LeatCode算法题第三题-无重复字符的最长子串

要求: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 我一开始采用的第一种方法是使用hashmap去比对大小,在idea上可以跑通程序,但在leatcode的编译器中,无法通过字符串s"" 和s"…

苹果推送和开发证书更新

1.背景 推送证书(生产Apple Push Services和开发APNs Development iOS)的有效期都是一年,将要过期的时候,苹果官方会发邮件提醒。 2.csr和推送证书更新 打开mac电脑,找到启动台-->其他,打开钥匙串访问。…

uni-app入门:WXML数据绑定

1.简单数据绑定 2.组件属性数据绑定 3.运算绑定 3.1三元运算符 3.2算数运算 3.3字符串拼接运算 3.4逻辑判断运算 正文 WXML全称:wexin markup language,微信标签语言,可以理解为web中的html,…

JavaEE之HTTP协议 Ⅱ

文章目录一、认识请求"报头"(header)1.HOST2.Content-Length3.Content-Type4.User-Agent (简称 UA)5.Referer4.Cookie二、HTTP响应详解1. 认识"状态码"(status code)2. Content-Type3. 如何构造HTTP请求总结一、认识请求"报头"(header) 这里的键…

php资源列表|开发者应知晓

PHP PSR 代码标准 官网: https://www.php-fig.org原文: https://github.com/php-fig/fi...中文: https://psr.phphub.orgPHP资源列表PHP设计模式PHP知识技能树PHP资源站 PHP WeeklyCodeVisuallyPHP LeagueKnpLabs开发项目 FastAdmin - 基于 ThinkPHP5 + Bootstrap 的极速后台开…

ubuntu搭建Elasticsearch过程与问题

目录 一.下载Elasticsearh 二.解压 创建需要的文件目录 三.修改配置文件 四.遇到的问题 1.root账号启动问题 2.创建文件不授权切换到非root用户test的时候报错 3.启动最后还是报错 4.浏览器请求http://localhost:9200 报错:received plaintext http traffic…

【python】算法与数据结构作业记录分析

目录 算法与数据结构实验题 9.21 朋友圈 ★实验任务 ★数据输入 ★数据输出 输入示例 输出示例 代码实现 效果展示 算法与数据结构实验题 9.24 水杯 ★实验任务 ★数据输入 ★数据输出 输入示例 输出示例 代码实现 效果展示 算法与数据结构实验题 9.21 朋友圈 …

实验(四):LCD1602显示实验

一、实验目的与任务 实验目的: 1. 掌握LCD1602显示控制方法; 2. 掌握利用Proteus进行单片机控制系统的仿真及调试方法。 3. 掌握单片机开发板的使用。 任务: 1.根据要求编写程序,并写出原理性注释; 2. 将检查程序运行的…

Java入门项目——读书管理系统

Java简单实现读书管理系统一、前言二、思路及整体框架三、代码展示1.有关读书包(Book)2.有关用户包3.有关操作书的包一、前言 相信有很多小伙伴学习完了【JavaSE】基础语法,想知道自己到底学的怎么样,或则学完不知道这么把知识点…

JavaFX之Scene Builder的使用(开发一款GUI小工具原来这么简单)

文章目录一、前言二、JavaFX与Scene Builder下载三、Scene Builder的使用四、详细教学(示例)4.1 环境配置4.2 创建fxml文件以及Controller类文件4.3 自定义界面4.4 运行我们的程序五、拓展总结博主个人社区:开发与算法学习社区 博主个人主页&…

创建.gitignore文件并使用

创建 .gitignore文件 第一种方式 在项目根目录下直接创建一个文件,后缀改成 .gitignore 即可。 第二种方式 用git创建,到根目录下,执行 touch .gitignore,即可看见目录下已经出现了该忽略文件。 添加忽略规则 # 忽略所有以 …

httpOnly对于抵御Session劫持的个人小结

Ⅰ 什么是http only?起到什么防护作用? cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,主要防护的攻击手段:XSS不能通过document对象直接获取cookie Ⅱ 怎么绕过http only的防护(三种&#xff…

5、CSS——三种样式和样式优先级、CSS中颜色设置方式、标签选择器和基本选择器的优先级

目录 一、行内样式 二、内部样式 三、外部样式 1、创建外部样式步骤 2、引入外部样式的两种方式 2.1 第一种 2.2 第二种 3、style标签内的注释符号 四、样式优先级 五、CSS中颜色设置方式 1、使用颜色的英文单词 2、使用十六进制表示法 3、使用rgb()表示法…

Redis分区/分片详解

分区/分片详解 分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。 如果只使用一个redis实例时,其中保存了服务器中全部的缓存数据,这样会有很大风险,如果单台redis服务宕机了将会影响到整个服务。解决的…