掌握RocketMQ——基本概念和系统架构

简述RcoketMQ

概念:RocketMQ是一个开源的分布式消息中间件,由阿里巴巴开发并贡献给Apache软件基金会。它用于处理高吞吐量、低延迟的消息传递,并广泛应用于现代分布式系统中。

1 基本概念

1.1 消息 (Message)

       概念:消息是信息传递的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。

模型图:

1.2 主题 (Topic)

       概念: 

       1.主题是消息的分类标识,用于区分不同类型的消息。
       2.每条消息只能属于一个主题,一个生产者可以同时发送多种主题的消息,而一个消费者只对某种特定的主题感兴趣,即只可以订阅和消费一种主题的消息。

模型图:

1.3 标签 (Tag)

        概念:为消息设置的标签。通过使用标签,消费者可以选择只接收特定类型的消息。

        标签通常用于在同一主题内区分消息的不同子类型或处理方式。消费者可以根据标签是实现对不同子主题的不同消费逻辑,实现更好的扩展性。

1.4 队列 (Queue)

        概念:队列是存储消息的物理结构,通常与主题相关联。每个主题可以对应多个队列,消息在队列中有序存储。

        补充:消费者从队列中拉取消息进行处理。队列的使用有助于实现负载均衡和消息的顺序消费。多个分区可以有多个消费者,一个分区只能有一个消费者。

1.5 消息标识 (Messageid/Key)

        概念:RocketMQ中每个消息拥有唯一的MessageId, 且可以携带具有业务标识的Key,以方便对消息的查询。

        注意:MessageId有两个:在生产者send(消息时会自动生成一个MessageId (msgId), 当消息到达Broker后,Broker也会自动生成一 个Messageld(offsetMsgId)。 msgId、 offsetMsgId与key都称为消息。
补充:
1.msgId: 由producer端生成, 其生成规则为:
producerIp +进程pid + MessageClientIDSetter类的ClassLoader的hashcode +当前时间+ Automi CInteger自增计数器
2.offsetMsgId: 由broker端生成, 其生成规则为: brokerIp +物理分区的offset
3.key:由用户指定的业务相关的唯一标识

2 系统架构

模型图:

2.1 生产者(Producer)

       消息生产者,负责生产消息。Producer通过MQ的负载均衡模块选择相应的Broker集群队列进行消息投递,投递的过程支持快速失败且低延迟。

模型图:

       在RocketMQ中消息生产者都是以生产者组的形式出现的。生产者组都是同一类生产者的集合,这类Producer发送相同主题类型的消息。

2.2 消费者和消费者组(Consumer和ConsumerGroup

       消息消费者,负责消费消息,一个消息消费者会从Broker服务器中取得消息,并对消息进行相关业务处理。

       同理,在RocketMQ中消息消费者都是以消费者组的形式出现,消费者组是同一类消费者的集合,这类Consumer消费的是同一个主题类型的消息。消费者组使得在消息消费方面,实现负载均衡和容错的目标变得非常容易。

来源于网络(下同)

       消费者组中Consumer的数量应该小于等于订阅Topic的Queue的数量,如果超出Queue数量,则多出的Consumer将不能消费消息。

一个Topic类型的消息可以被多个Consumer Group同时消费。

注意:

1.消费者组只能消费一个Topic的消息,不能同时消费多个Topic消息。

2.一个消费者组中的消费者必须订阅完全相同的Topic

2.3 消费点位(offset)

        由于不同消费者组之间的消息消费互不影响,当一个消费者组读取消息后,无法立即将其从MQ中移除。若移除,其他消费者组将无法读取;若不移除,则无法确定当前消费者组的消费进度。
        因此,通过Offset来标识一个消费者组的当前消费位置,每成功消费一条记录:Offset + 1。(MQ ≈ 数组,Offset ≈ 数组下标)

2.4 Name Server

       概念:其为一个Broker和Topic路由的注册中心,支持Broker动态注册和发现。

2.4.1 路由注册

       NameServer以集群方式部署,集群中的各个节点间无差异,互相不通讯。数据同步依靠Broker节点与每一个NameServer节点进行长连接,发起注册请求。(Broker节点为证明自己存活,会将最新信息以心跳包的方式上报NameServer,每30s一次。)

       优缺点:1.NameServer集群搭建简单。2.对于Broker要明确指出所有NameServer的地址,否则未指出地址的不会注册,故NameServer不可随意扩容,因为不重新配置Broker,新增的NameServer对于Broker不可见。

2.4.2 路由剔除

       由于Broker关机、宕机或网络抖动,NameServer没有收到Broker的心跳,则NameServer会将其从Broker列表中删除。NameServer中的定时任务会每隔10s扫描一次Broker列表并查看其最新心跳时间戳,距离当前时间超过120s,则判定Broker失效,将其从Broker列表中剔除。

2.4.3 路由发现

       RocketMQ的路由发现采用的是Pull模型。当Topic路由信息出现变化时,NameServer不会主动推动给客户端,而是由客户端定时拉取主题最新的路由,默认每30s拉取一次,所以存在实时性较差的问题。

       补充:1.Push模型:推送,实时性较好,需要维护一个长连接。2.Long Polling模型:长轮询模型,为Push和Pull模型的整合。

2.4.4 客户端(Producer和Consumer)NameServer选择策略

首先采用随机策略进行选择,失败后采用的是轮询策略

2.5 Broker

       概念:消息中转角色,负责存储消息、转发消息。在RocketMQ系统中负责接收并存储生产者发送来的消息,同时为消费者的拉取请求做准备。同时也存储消息的元数据。

2.5.1 模块构成

解释:

Remoting Module:整个Broker的实体,负责处理client端的请求。
Client Manager:客户端管理器,负责接收、解析客户端的请求,管理客户端。
Store Service:存储服务,提供方便简单的API接口,处理消息存储到物理硬盘和消息查询功能
HA Service:高可用服务,Master和Slave间的数据同步。
Index Service:索引服务,根据特定的Message Key,对投递到Broker的消息进行索引,也提供快速查询功能。

2.5.2 详解

Broker以集群形式出现。各集群中可能存放相同Topic的不用Queue。

       可能出现问题以及解决方法:如果某个Broker宕机,为了数据不丢失,会将每个Broker集群节点进行横向扩展,将Broker节点在建一个HA集群,解决单点问题。

       Broker是一个主从集群,集群中有Master和Slave。Master:负责读写操作。Slave:Master中国的数据的备份,Master挂了,Slave自动切换为Master。一个Master有多个Slave,一个Slave有一个Master。通过指定相同的BrokerName、不同的Brokerid来确定Master和Slave的对应关系,0为Master,非0为Slave。

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

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

相关文章

Ubuntu24.04远程开机

近来在几台机器上鼓捣linux桌面,顺便研究一下远程唤醒主机。 本篇介绍Ubuntu系统的远程唤醒,Windows系统的唤醒可搜索相关资料。 依赖 有远程唤醒功能的路由器(当前一般都带这个功能)有线连接主机(无线连接有兴趣朋友…

Pikachu-Sql-Inject -基于boolian的盲注

基于boolean的盲注: 1、没有报错信息显示; 2、不管是正确的输入,还是错误的输入,都只显示两种情况,true or false; 3、在正确的输入下,输入and 1 1/and 1 2发现可以判断; 布尔盲注常用函数&…

YOLO11改进|注意力机制篇|引入反向残差移动快iRMB

目录 一、【iRMB】注意力机制1.1【iRMB】注意力介绍1.2【iRMB】核心代码 二、添加【iRMB】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【iRMB】注意力机制 1.1【iRMB】注意力介绍 反向残差移动快iRMB结构如下所示&#xf…

【Canvas与标牌】盾形银底红带Best Quality Premium标牌

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>BestQulityPremium金属牌重制版Draft2</title><style type&…

雷池+frp 批量设置proxy_protocol实现真实IP透传

需求 内网部署safeline&#xff0c;通过frp让外网访问内部web网站服务&#xff0c;让safeline记录真实外网攻击IP safeline 跟 frp都部署在同一台服务器&#xff1a;192.168.2.103 frp client 配置 frpc只需要在https上添加transport.proxyProtocolVersion "v2"即…

旅游管理智能化转型:SpringBoot系统设计与实现

第四章 系统设计 4.1系统结构设计 对于本系统的开发设计&#xff0c;先自上向下&#xff0c;将一个完整的系统分解成许多个小系统来进行实现&#xff1b;再自下向上&#xff0c;将所有的“零件”组装成一个大的、完整的系统。因此这里面的许多个小功能块都要对将要实现的功能进…

Pikachu-Sql-Inject - 基于时间的盲注

基于时间的盲注&#xff1a; 就是前端的基于time 的盲注&#xff0c;什么错误信息都看不到&#xff0c;但是还可以通过特定的输入&#xff0c;判断后台的执行时间&#xff0c;从而确定注入。 mysql 里函数sleep() 是延时的意思&#xff0c;sleep(10)就是数据库延时10 秒返回内…

Android Framework AMS(02)AMS启动及相关初始化5-8

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要涉及systemserver启动AMS及初始化AMS相关操作。同时由于该部分内容过多&#xff0c;因此拆成2个章节&#xff0c;本章节是第二章节&…

18734 拓扑排序

### 思路 1. **建模问题**&#xff1a;将课程和依赖关系建模为有向图&#xff0c;其中课程是节点&#xff0c;依赖关系是有向边。 2. **选择算法**&#xff1a;使用拓扑排序算法来确定课程的学习顺序。由于需要确保输出唯一性&#xff0c;同等条件下编号小的课程排在前面&…

将自己写好的项目部署在自己的云服务器上

准备工作 这里呢我要下载的终端软件是Xshell 如图&#xff1a; 自己准备好服务器&#xff0c;我这里的是阿里云的服务器&#xff0c; 如图&#xff1a; 这两个准备好之后呢&#xff0c;然后对我们的项目进行打包。 如图&#xff1a; 这里双击打包就行了。 找到自己打成jar包…

桌面时钟哪个好?今年最热门的桌面时钟主题

桌面时钟可以让我们更方便的知道当前的时间&#xff0c;日期&#xff0c;因为它非常直观的展示在桌面上&#xff0c;当我们需要看时间的时候&#xff0c;一眼就可以看到了&#xff0c;这是一个非常便捷的功能&#xff0c;我们一起来看下《芝麻时钟》&#xff08;下载地址&#…

停车位识别数据集 图片数量12416张YOLO,xml和txt标签都有; 2类类别:space-empty,space-occupied;

YOLO停车位识别 图片数量12416张&#xff0c;xml和txt标签都有&#xff1b; 2类类别&#xff1a;space-empty&#xff0c;space-occupied&#xff1b; 用于yolo&#xff0c;Python&#xff0c;目标检测&#xff0c;机器学习&#xff0c;人工智能&#xff0c;深度学习&#xff0…

vSAN06:ESA与OSA对比、ESA安装、新架构、工作方式、自动策略管理、原生快照、数据压缩、故障处理

目录 vSAN ESAvSAN ESA 安装ESA新架构ESA工作方式ESA自动策略管理自适应RAID5策略 原生快照支持数据压缩的改进ESA故障处理 vSAN ESA vSAN ESA 安装 流程和OSA完全一致&#xff0c;但要注意要勾选启用vSAN ESA ESA和OSA的底层架构不一样&#xff0c;但是UI上是一致的。 生产环…

【2024最新】华为HCIE认证考试流程

HCIE是华为认证体系中最高级别的ICT技术认证&#xff0c;表示通过认证的人具有ICT领域专业知识和丰富实践经验。 HCIE认证方向&#xff1a;最高认证级别HCIE的技术方向有13个 下面以HCIE-Datacom为例给大家介绍一下&#xff1a; HCIE-Datacom认证考试流程&#xff1a; 1.笔试…

Hive3.x版本调优总结

文章目录 第 1 章 Explain 查看执行计划&#xff08;重点&#xff09;1.1 创建测试用表1&#xff09;建大表、小表和 JOIN 后表的语句2&#xff09;分别向大表和小表中导入数据 1.2 基本语法1.3 案例实操 第 2 章 Hive 建表优化2.1 分区表2.1.1 分区表基本操作2.1.2 二级分区2.…

vmvare虚拟机centos 忘记超级管理员密码怎么办?

vmvare虚拟机centos 忘记超级管理员密码怎么办?如何重置密码呢? 一、前置操作 重启vmvare虚拟机的过程中,长按住Shift键 选择第一个的时候,按下按键 e 进入编辑状态。 然后就会进入到类似这个界面中。 在下方界面 添加 init=/bin/sh,然后按下Ctrl+x进行保存退出。 init=/bi…

本田汽车投资SiLC Technologies:携手共促自动驾驶技术新飞跃

SiLC Technologies获本田汽车投资:加速自动驾驶技术革新 近日,硅谷光子学初创公司SiLC Technologies宣布获得本田汽车的投资,这一合作标志着双方将共同推进自动驾驶技术领域的革新与发展。本田此次投资不仅体现了对SiLC Technologies技术实力的认可,也彰显了本田在自动驾驶…

昇思学习打卡营第31天|深度解密 CycleGAN 图像风格迁移:从草图到线稿的无缝转化

1. 简介 图像风格迁移是计算机视觉领域中的一个热门研究方向&#xff0c;其中 CycleGAN (循环对抗生成网络) 在无监督领域取得了显著的突破。与传统需要成对训练数据的模型如 Pix2Pix 不同&#xff0c;CycleGAN 不需要严格的成对数据&#xff0c;只需两类图片域数据&#xff0c…

IDEA:增加类注释模板和方法注释模板

文章目录 概要配置类注释模板配置方法模版 概要 配置类注释和方法注释 配置类注释模板 点击setting->Editor->File and Code Templates&#xff0c;然后找到Class&#xff0c;如下图&#xff1a; 注意勾掉Reformat according to style&#xff0c;否则会格式化。 注…

动态规划算法专题(四):子串、子数组系列

目录 1、最大子数组和 1.1 算法原理 1.2 算法代码 2、环形子数组的最大和 2.1 算法原理 2.2 算法代码 3、乘积最大子数组 3.1 算法原理 3.2 算法代码 4、乘积为正数的最长子数组长度 4.1 算法原理 4.2 算法代码 5、等差数列划分 5.1 算法原理 5.2 算法代码 6、…