RocketMQ 基本概念

news2024/9/21 17:39:57

RocketMQ的由来

随着使⽤中队列和虚拟主题的增加,阿⾥巴巴团队使⽤的 ActiveMQ IO 模块达到了瓶颈。为了尽⼒通过节流、断路器或降级来解决这个问题,但效果不佳。所以开始 关注当时流⾏的消息传递解决⽅案Kafka 。不幸的是, Kafka ⽆法满⾜要求(在这么多消息队列中间,kafka性能是最靠谱的,但是会出现丢消息的问题),尤其是在低延迟和⾼可靠性⽅⾯。
在这种情况下,决定发明⼀种新的消息传递引擎来处理更⼴泛的⽤例,从传统的发布/ 订阅场景到⼤容量实时零丢失交易系统。⽬前RocketMQ已经开源给 Apache 基⾦会。如今,已有 100 多家公司在其业务中使⽤开源版本的 RocketMQ
技术架构

RocketMQ架构上主要分为四部分,如上图所示:
Producer :消息发布的⻆⾊,⽀持分布式集群⽅式部署。 Producer 通过 MQ 的负载均衡模块选择相应的Broker 集群队列进⾏消息投递,投递的过程⽀持快速失败并且低延迟。
左边的生产者可以是一个集群,右边是消费者,消费者也可以是一个集群。集群的作用就是提高性能和保证其稳定性。生产者集群里面会有多个生产者,生产者主要功能就是将消息发送给消息队列。
Consumer :消息消费的⻆⾊,⽀持分布式集群⽅式部署。⽀持以 push 推, pull拉两种模式对消息进⾏消费。同时也⽀持集群⽅式和⼴播⽅式的消费,它提供实时消息订阅机制,可以满⾜⼤多数⽤户的需求。

消费者主要功能就是从消息队列拉取消息,或者说接收消息。

NameServer(轻量级注册中心) NameServer 是⼀个⾮常简单的 Topic 路由注册中⼼,其⻆⾊类似Dubbo中的 zookeeper ,⽀持 Broker 的动态注册与发现。
注册中心:有数据可以注册上来,那么还有订阅者从注册中心订阅到它所需要的数据。对于nameserver也是一样,什么样的数据可以注册上来呢?真正消息队列的中间件broker,broker可以理解为提供消息服务的角色。消息服务或者说整个rocketmq里面所有的功能,这样一个功能,工具,可以使用broker来描述。
主要包括两个功能:
  • Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供⼼跳检测机制,检查Broker是否还存活。
  • 路由信息管理,每个NameServer将保存关于Broker集群的整个路由信息和⽤于客户端查询的队列信息。然后ProducerConumser通过NameServer就可以知道整个Broker集群的路由信息,从⽽进⾏消息的投递和消费。NameServer通常也是集群的⽅式部署,各实例间相互不进⾏信息通讯。Broker是向每⼀台NameServer注册⾃⼰的路由信息,所以每⼀个NameServer实例上⾯都保存⼀份完整的路由信息。当某个NameServer因某种原因下线了,Broker仍然可以向其它NameServer同步其路由信息,Producer,Consumer仍然可以动态感知Broker的路由的信息。

 

 

这里有很多broker,简单理解就是有很多rocketmq。 除了有好多台mq,还会发现有master和slave。两个broker之间构成了主从。

主从目的可以提升性能,读写可以在broker master,读可以在broke他slave。也就是两个broker都可以提供读的服务,这样性能会更加好。

当有一个master挂了,slave可以顶上,这样就形成了broker的高可用。两个broker都是主从关系,一个broker可以存放一部分数据,另外一个broker可以存放另外一部分数据。当然broker master1和broker master2的数据可以是相同的。

rockermq是重topic的mq,也就是它需要有topic才能整个工作机制可以顺利的运行。topic就是主题的意思。

对于生产者需要将消息发送到某一个topic上,但是实际的消息存储在broker上面,topic是用来区分消息的。

BrokerServer Broker 主要负责消息的存储、投递和查询以及服务⾼可⽤保证, 为了实现这些功能,Broker 包含了以下⼏个重要⼦模块。
Remoting Module :整个 Broker 的实体,负责处理来⾃ clients 端的请求。
Client Manager :负责管理客户端 (Producer/Consumer) 和维护 Consumer
Topic 订阅信息
Store Service :提供⽅便简单的 API 接⼝处理消息存储到物理硬盘和查询功
能。
HA Service :⾼可⽤服务,提供 Master Broker Slave Broker 之间的数据同步
功能。
Index Service :根据特定的 Message key 对投递到 Broker 的消息进⾏索引服
务,以提供消息的快速查询。

 

对于生产者producer来说要将消息发送给某个topic上, 比如消息发送到t1这个topic,t1的topic在broker master1上面,那么消息就会存储在这个topic上面。如果又发消息给t2这个topic,那么t2 topic是放在broker master2上面。很显然这个消息会存储在broker master2上面。

也就是生产者通过topic将消息进行区分,当然两个broker之间也可以保存相同的topic。

生产者是怎么将消息发送到broker上面的呢?它是怎么知道broker的地址呢?在broker集群里面会有很多的broker,这些broker要将自己的信息注册到nameserver上面。

在nameserver集群里面,多台nameserver节点之间是无状态的,他们相互之间不需要知道彼此的状态。nameserver启动了,它不需要知道集群中有几台nameserver。

启动了nameserver1,那么nameserver1就是独立的个体。即使集群当中可能有nameserver2,nameserver3,对于nameserver1来说是不知道其他人的存在。这样的话就能够保证他们的无状态。

broker会去将自己的信息同时注册到nameserver的每一台节点上面。比如broker master1里面存放了topic1这样一个topic。注册到nameserver里面就会有一条映射关系t1->broker1,或者t1->broker2,这样的映射关系就会存在于每一台nameserver。

对于producter来说需要去做broker的discover。就是去发现broker,要发到t1上面,这样producer就要去nameserver里面订阅。发送到t1上面到底需要哪个broker呢?nameserver cluster会告诉你。

生产者拿到broker的地址,那么就会将发送到topic1的消息发送到这个broker上面broker master1上面。

消息发过去对于broker集群来说,站在生产者角度来说是同一个broker,只不过在这个地方部署了主从。主负责写,从负责读,主也能实现部分读数据的功能。

 消费者要消费某一个topic,它也要去nameserver订阅broker,消费者的topic t1在哪个broker上面。然后连接到该broker上面。

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

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

相关文章

【linux笔记dpkg-buildpackage打包】把一个helloworld程序打包为deb包

说明 打包发布可以不用编译源代码安装&#xff0c;看起来是更方便的软件拷贝方式&#xff0c;下面是一个dpkg-buildpackage工具的最简打包过程实例 先建立一个helloworld程序 main.c #include <stdio.h>int main() {printf("Hello, World!\n");return 0; }…

小程序开关组件

前提是vant组件库不太好改&#xff0c;干脆就手写了一个 <template><view class"switch-container" click"toggleOrder"><view :class"[switch-text, left-text, { left-textChoose: isReverseOrder }]">{{ leftText }}</…

渣土车监控摄像头

渣土车监控摄像头 是一种结合了监控摄像技术和车辆安全管理的先进设备&#xff0c;旨在通过实时监测和录制车辆行驶过程中的画面&#xff0c;提高渣土车的安全性和管理效率。这种摄像头在建筑工地、城市道路、交通执法等领域有着广泛的应用前景。 渣土车监控摄像头在建筑工地运…

在AIoT设备上加速深度神经网络推理的进展:一项综述

这篇论文的标题是《Advancements in Accelerating Deep Neural Network Inference on AIoT Devices: A Survey》&#xff0c;作者是 Long Cheng, Yan Gu, Qingzhi Liu, Lei Yang, Cheng Liu, Ying Wang。论文主要探讨了在人工智能物联网&#xff08;AIoT&#xff09;设备上加速…

多层建筑能源参数化模型和城市冠层模型的区别

多层建筑能源参数化&#xff08;Multi-layer Building Energy Parameterization, BEP&#xff09;模型和城市冠层模型&#xff08;Urban Canopy Model, UCM&#xff09;都是用于模拟城市环境中能量交换和微气候的数值模型&#xff0c;但它们的侧重点和应用场景有所不同。以下是…

重要涉密文件如何防窃取?一分钟了解这5个有效的办法,超实用!

在信息化时代&#xff0c;重要涉密文件承载着企业的核心业务机密、技术专利和敏感客户信息等关键数据。 一旦这些文件被不法分子窃取&#xff0c;不仅会导致无法估量的经济损失&#xff0c;还会严重损害企业的声誉。 因此&#xff0c;构建一个全面的防护体系来防止涉密文件被…

癌症细胞状态的十年探索:单细胞RNA测序的启示

癌症细胞状态的十年探索&#xff1a;单细胞RNA测序的启示 引言 在过去的十年里&#xff0c;单细胞RNA测序&#xff08;scRNA-seq&#xff09;技术彻底改变了我们对复杂生物系统的理解&#xff0c;尤其是在癌症研究领域。癌症作为一种由多种遗传克隆和恶性细胞状态组成的复杂生…

2024年开学季,有哪些大学宿舍必备好物?

随着2024年开学季的到来&#xff0c;新生们即将离开熟悉的家乡&#xff0c;踏入充满未知与挑战的大学生活。对于许多学子而言&#xff0c;宿舍不仅是他们未来几年的居住之所&#xff0c;更是承载青春记忆、实现自我成长的重要空间。为了帮助大家更好地适应校园生活&#xff0c;…

基于Arduino和PCB技术的机器人炫彩矩阵点屏的制作过程

第一部分&#xff1a;引入 随着物联网和嵌入式系统技术的发展&#xff0c;炫彩点阵屏在装饰和信息显示中得到广泛应用。本文将记录如何使用Arduino板、WS2812灯珠和PCB制作技术实现机器人炫彩点阵屏的制作过程。WS2812灯珠以其高亮度、色彩丰富和可编程性&#xff0c;成为制作…

探索代码的守护者:Pyflakes,Python代码的隐形盾牌

文章目录 探索代码的守护者&#xff1a;Pyflakes&#xff0c;Python代码的隐形盾牌第一部分&#xff1a;背景介绍第二部分&#xff1a;Pyflakes是什么&#xff1f;第三部分&#xff1a;如何安装Pyflakes&#xff1f;第四部分&#xff1a;Pyflakes的简单使用方法第五部分&#x…

STM32 移植FATFS时遇到ff_oem2uni函数未定义问题

STM32 移植FATFS时遇到ff_oem2uni/ff_uni2oem/ff_wtoupper函数未定义问题 在移植STM32 FATFS文件系统代码时&#xff0c;完成后编译遇到如下错误&#xff1a; 经过排查分析&#xff0c;是文件没有添加完全导致的&#xff1a; 把ffunicode.c文件添加进工程就可以了&#xff…

CAN数据记录仪与乘用车或者工程车辆OBD口连接注意事项

CAN数据记录仪配置好参数后&#xff0c;车上OBD接口CAN信号线定义是3&#xff0c;11(CANH,CANL)&#xff1b;6&#xff0c;14(CANH,CANL)&#xff0c;直接插到车上可以正常记录数据&#xff1b; 具体分析步骤如下&#xff1a; 1.使用之前了解CANFDLog-VCI设备的接口定义。 下图…

Java Web实战:利用三层架构与Servlet构建登录注册模块

前言导读 三层架构&#xff1a;View&#xff08;视图层&#xff09;Service&#xff08;业务层&#xff09;DAO&#xff08;持久层&#xff09; 使用了JDBCtemplate技术&#xff0c;封装了原生的JDBC技术操作MySQL数据库&#xff08;DAO层&#xff09;实现了登录功能和注册功能…

PyQt5 图标(icon)显示问题

遇到这种情况&#xff0c;一般采用下面几种方法&#xff0c;特别是第三种。 第一种&#xff0c;直接应用绝对路径&#xff1a; self.setWindowIcon(QIcon("F:/Workspace/PyQT5-Study/images/cat.png"))第二种&#xff0c;采用动态路径&#xff1a; from PyQt5.QtC…

轻量级模型解读——轻量transformer系列

先占坑&#xff0c;持续更新 。。。 文章目录 1、DeiT2、ConViT3、Mobile-Former4、MobileViT Transformer是2017谷歌提出的一篇论文&#xff0c;最早应用于NLP领域的机器翻译工作&#xff0c;Transformer解读&#xff0c;但随着2020年DETR和ViT的出现(DETR解读&#xff0c;ViT…

YOLOv9改进策略【卷积层】| SCConv:即插即用,减少冗余计算并提升特征学习

一、本文介绍 本文记录的是利用SCConv优化YOLOv9的目标检测网络模型。深度神经网络中存在大量冗余&#xff0c;不仅在密集模型参数中&#xff0c;而且在特征图的空间和通道维度中。SCConv模块通过联合减少卷积层中空间和通道的冗余&#xff0c;有效地限制了特征冗余&#xff0…

领夹麦克风哪个品牌好,哪种领夹麦性价比高,无线麦克风推荐

在音频录制需求日益多样化的今天&#xff0c;无线领夹麦克风作为提升音质的关键设备&#xff0c;其重要性不言而喻。市场上鱼龙混杂&#xff0c;假冒伪劣、以次充好的现象屡见不鲜。这些产品往往以低价吸引消费者&#xff0c;却在音质、稳定性、耐用性等方面大打折扣&#xff0…

突发!OpenAI发布最强模型o1:博士物理92.8分,IOI金牌水平

梦晨 衡宇 发自 凹非寺量子位 | 公众号 QbitAI 参考ChatGPT&#xff1a;点击使用 来了来了&#xff01;刚刚&#xff0c;OpenAI新模型无预警上新&#xff1a; o1系列&#xff0c;可以进行通用复杂推理&#xff0c;每次回答要花费更长时间思考。 在解决博士水平的物理问题时&a…

034-GeoGebra中级篇-关于geogebra的版本以及如何下载本地geogebra

目前&#xff0c;geogebra常用的有geogebra5和geogebra6&#xff0c;本文旨在对比GeoGebra 5和GeoGebra 6两个版本&#xff0c;以揭示它们在功能、用户体验和性能上的主要差异。GeoGebra 5作为一款成熟的数学软件&#xff0c;已经为用户提供了丰富的功能来进行几何、代数、统计…

太牛了!顺丰丰语大语言模型:已应用于20余个场景

9月8日&#xff0c;顺丰科技在深圳国际人工智能展上发布了物流行业的垂直领域大语言模型——丰语&#xff0c;并展示了大模型在顺丰的市场营销、客服、收派、国际关务等业务板块的二十余个场景中的落地实践应用。 发布会现场&#xff0c;中国科学院院士姚建铨、美国医学与生物…