RocketMQ架构详解

文章目录

    • 概述
    • RocketMQ架构
    • Broker 高可用集群
    • 刷盘策略

概述

RocketMQ一个纯java、分布式、队列模型的开源消息中间件,前身是MetaQ,是阿里研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具有高性能、高可靠、高实时、分布式特点。
RocketMQ是阿里开源的分布式消息中间件,跟其它中间件相比,RocketMQ的特点是纯JAVA实现;集群和HA实现相对简单;在发生宕机和其它故障时消息丢失率更低。

RocketMQ架构

在这里插入图片描述
在这里插入图片描述

● Producer:消息生产者
● Consumer:消费者
● Broker:MQ 服务,负责接收、分发消息
● NameServer:负责 MQ 服务之间的协调
整体架构中包含四种角色
● Producer :消息发布的角色,Producer 通过 MQ 的负载均衡模块选择相应的 Broker 集群队列进行消息投递,投递的过程支持快速失败并且低延迟。
● Consumer :消息消费的角色,支持以 push 推,pull 拉两种模式对消息进行消费。
● NameServer :名字服务是一个非常简单的 Topic 路由注册中心,其角色类似 Dubbo 中的 zookeeper ,支持 Broker 的动态注册与发现。
● BrokerServer :Broker 主要负责消息的存储、投递和查询以及服务高可用保证

Producer
消息生产者,位于用户的进程内,Producer通过NameServer获取所有Broker的路由信息,根据负载均衡策略选择将消息发到哪个Broker,然后调用Broker接口提交消息。
Producer Group
生产者组,简单来说就是多个发送同一类消息的生产者称之为一个生产者组。
Consumer
消息消费者,位于用户进程内。Consumer通过NameServer获取所有broker的路由信息后,向Broker发送Pull请求来获取消息数据。Consumer可以以两种模式启动,广播(Broadcast)和集群(Cluster),广播模式下,一条消息会发送给所有Consumer,集群模式下消息只会发送给一个Consumer。
Consumer Group
消费者组,和生产者类似,消费同一类消息的多个 Consumer 实例组成一个消费者组。
Topic
Topic用于将消息按主题做划分,Producer将消息发往指定的Topic,Consumer订阅该Topic就可以收到这条消息。Topic跟发送方和消费方都没有强关联关系,发送方可以同时往多个Topic投放消息,消费方也可以订阅多个Topic的消息。在RocketMQ中,Topic是一个上逻辑概念。消息存储不会按Topic分开。
Message
代表一条消息,使用MessageId唯一识别,用户在发送时可以设置messageKey,便于之后查询和跟踪。一个 Message 必须指定 Topic,相当于寄信的地址。Message 还有一个可选的 Tag 设置,以便消费端可以基于 Tag 进行过滤消息。也可以添加额外的键值对,例如你需要一个业务 key 来查找 Broker 上的消息,方便在开发过程中诊断问题。
Tag
标签可以被认为是对 Topic 进一步细化。一般在相同业务模块中通过引入标签来标记不同用途的消息。
Broker
Broker是RocketMQ的核心模块,负责接收并存储消息,同时提供Push/Pull接口来将消息发送给Consumer。Consumer可选择从Master或者Slave读取数据。多个主/从组成Broker集群,集群内的Master节点之间不做数据交互。Broker同时提供消息查询的功能,可以通过MessageID和MessageKey来查询消息。Borker会将自己的Topic配置信息实时同步到NameServer。
Queue
Topic和Queue是1对多的关系,一个Topic下可以包含多个Queue,主要用于负载均衡。发送消息时,用户只指定Topic,Producer会根据Topic的路由信息选择具体发到哪个Queue上。Consumer订阅消息时,会根据负载均衡策略决定订阅哪些Queue的消息。
Offset
RocketMQ在存储消息时会为每个Topic下的每个Queue生成一个消息的索引文件,每个Queue都对应一个Offset记录当前Queue中消息条数。
NameServer
NameServer可以看作是RocketMQ的注册中心,它管理两部分数据:集群的Topic-Queue的路由配置;Broker的实时配置信息。其它模块通过Nameserv提供的接口获取最新的Topic配置和路由信息。
● Producer/Consumer :通过查询接口获取Topic对应的Broker的地址信息
● Broker : 注册配置信息到NameServer, 实时更新Topic信息到NameServer

Broker 高可用集群

Broker 通过主从集群来实现消息高可用。跟 Kafka 不同的是,RocketMQ 并没有 Master 节点选举功能,而是采用多 Master 多 Slave 的集群架构。Producer 写入消息时写入 Master 节点,Slave 节点主动从 Master 节点拉取数据来保持跟 Master 节点的数据一致。
Consumer 消费消息时,既可以从 Master 节点拉取数据,也可以从 Slave 节点拉取数据。 到底是从 Master 拉取还是从 Slave 拉取取决于 Master 节点的负载和 Slave 的同步情况 。如果 Master 负载很高,Master 会通知 Consumer 从 Slave 拉取消息,而如果 Slave 同步消息进度延后,则 Master 会通知 Consumer 从 Master 拉取数据。总之,从 Master 拉取还是从 Slave 拉取由 Master 来决定。
如果 Master 节点发生故障,RocketMQ 会使用基于 raft 协议的 DLedger 算法来进行主从切换。Broker 每隔 30s 向 Name Server 发送心跳,Name Server 如果 120s 没有收到心跳,就会判断 Broker 宕机了

刷盘策略

RocketMQ 采用灵活的刷盘策略。
异步刷盘
消息写入 CommitLog 时,并不会直接写入磁盘,而是先写入PageCache 缓存中,然后用后台线程异步把消息刷入磁盘。异步刷盘策略就是消息写入 PageCache 后立即返回成功,这样写入效率非常高。如果能容忍消息丢失,异步刷盘是最好的选择。
同步刷盘
即使同步刷盘,RocketMQ 也不是每条消息都要刷盘,线程将消息写入内存后,会请求刷盘线程进行刷盘,但是刷盘线程并不会只把当前请求的消息刷盘,而是会把待刷盘的消息一同刷盘。同步刷盘策略保证了消息的可靠性,但是也降低了吞吐量,增加了延迟。

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

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

相关文章

QT计算两个日期之间的月份数

数据库中单表数据存储量过大时,会造成数据库的查询统计速度变慢,因此需将单表数据拆分存储到按年月命名的多张数据表中。解决思路是获取单表中的最小时间和最大时间,然后计算两个时间中的月份数量,最后根据开始年月循环算出所有需…

Spring事务管理

一、事务的基本概念 事务是一系列的操作,它们要么全部完成,要么全部不完成,是一个不可分割的工作单位。事务的处理必须满足其四个基本特性,即原子性(Atomicity)、一致性(Consistency&#xff0…

软件测试的基本概念

目录 1.测试需求 2.测试用例的概念 3.bug 4.软件生命周期 4.1需求分析 4.2计划 4.3编码 4.4测试 4.5运行维护 5.测试模型 5.1敏捷开发模型 5.2scrume 5.3测试模型 5.4w模型(双v模型) 6.软件测试的生命周期 7.BUG的描述和定义 8.如何定义bug的级别 9.BUG的…

机器学习——线性回归

机器学习——线性回归 文章目录 机器学习——线性回归一、什么是线性回归二、一元线性回归方程三、损失函数四、代码实现五、运用说明 一、什么是线性回归 线性回归是一种用来建立自变量和因变量之间线性关系的统计分析方法,也是机器学习中最常见、最容易理解的一个…

Java面试篇【RabbitMQ】常见面试题(2024最新)

RabbitMQ 1.为什么使用MQ?优点是什么 因为MQ可以异步处理,提高系统吞吐量。 应用解耦,系统之间可以通过消息通信,不关心其他系统的处理。 流量削峰,可以通过消息队列的长度,控制请求量。可以缓解短时间内的高并发请…

无线电信号及其分类

有线与无线通信 通信:指信息的交流与传递。 有线通信:用导向性传输媒体,即信息流沿着固体媒体传播。 例如电报、座机都是沿导线传送信号。 无线通信:用非导向性传输媒体,即在自由空间中被传播。分为红外线、电磁波等…

TCP/IP超全笔记 - TCP篇

TCP/IP超全笔记 - TCP篇 什么是 TCP TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。 面向连接:一对一,先连接,再传输数据可靠交付:…

openGauss gsql 常用元命令 一

openGauss gsql 常用元命令 一 连接数据库 使用 -E 参数可以显示元命令具体执行的 SQL 信息 [ommog1 ~]$ gsql -d postgres -p15400 -E gsql ((openGauss 2.1.0 build 590b0f8e) compiled at 2021-09-30 14:29:04 commit 0 last mr ) Non-SSL connection (SSL connection is…

【Mysql】InnoDB 中的聚簇索引、二级索引、联合索引

一、聚簇索引 其实之前内容中介绍的 B 树就是聚簇索引。 这种索引不需要我们显示地使用 INDEX 语句去创建,InnoDB 引擎会自动创建。另外,在 InnoDB 引擎中,聚簇索引就是数据的存储方式。 它有 2 个特点: 特点 1 使用记录主键…

HTTPS安全机制解析:如何保护我们的数据传输

引言 在数字时代,网络安全成为了互联网用户和服务提供者不可忽视的关键议题。特别是,HTTPS(全称为HyperText Transfer Protocol Secure)相比于其前身HTTP(HyperText Transfer Protocol),通过引…

如何恢复已删除的华为手机图片?5 种方式分享

不幸的现实是,华为的珍贵时刻有时会因为意外删除、软件故障或其他不可预见的情况而在眨眼之间消失。在这种情况下,寻求恢复已删除的图片成为个人迫切关心的问题。 本文旨在为用户提供如何从华为恢复已删除图片的实用解决方案。我们将探索五种可行的方法…

6-1 判回文

作者 唐艳琴 单位 中国人民解放军陆军工程大学 本题要求实现一个函数,判断字符串是否是回文。如果是则返回1,否则返回0。 函数接口定义: int isecho(char a[]);返回值为1,表示是回文;返回值为0,表示不是…

光线追踪5- Surface normals and multiple objects

首先,让我们获取一个表面法线,以便进行着色。这是一个垂直于交点处表面的向量。在我们的代码中,我们需要做一个重要的设计决定:法线向量是否为任意长度,还是将其归一化为单位长度。 诱人的是,如果不…

视频远程监控平台EasyCVR集成后播放只有一帧画面的原因排查与解决

智慧安防视频监控平台EasyCVR能在复杂的网络环境中(专网、局域网、广域网、VPN、公网等)将前端海量的设备进行统一集中接入与视频汇聚管理,平台可支持的接入协议包括:国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议…

【STM32下UART协议的一些认识与使用方法】

STM32下UART协议的一些认识与使用方法 串口定义通用串行异步收发器 协议中相关的概念空闲位起始位数据位奇偶校验位三种校验方式BT接收数据的流程 停止位波特率总结 UART的三种工作方式UART控制器发送数据流程接收数据流程 UART初始化UART相关结构体和库函数 串口定义 通用串行…

揭秘共享旅游卡项目变现的6种方式,至少有4种适合创业者!

最近每天都有不少的朋友添加我,多数人会问一个问题,共享旅游卡这个项目好不好做?还有部分朋友会问,共享旅游卡有没有市场,是不是有我们所宣传的这样乐观? 从过年前开始,我一直在关注咱们共享旅…

自然语言处理之语言模型(LM)深度解析

自然语言处理(Natural Language Processing,NLP)作为人工智能的一个重要分支,近年来在学术界和工业界均取得了显著的进展。语言模型(Language Model, LM)是自然语言处理技术中的基石,它能够预测…

云计算 3月6号 (crontab-计划任务 日志轮转 免密登录)

一、计划任务 计划任务概念解析 在Linux操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划好的系统管理任务(如定期备份、定期采集监测数据)。RHEL6系统中默认已安装了at、crontab软件…

抖音视频评论区用户采集工具使用教程

抖音视频评论区用户采集工具是一款用于收集抖音视频评论区用户信息的工具。通过该工具,用户可以提取抖音视频评论区的用户昵称、评论内容、点赞数等信息,并进行数据分析和统计。该工具可以帮助用户了解抖音视频评论区的用户特点和评论趋势,提…

基于Spring Boot + Vue的信息化在线教学平台

末尾获取源码作者介绍:大家好,我是墨韵,本人4年开发经验,专注定制项目开发 更多项目:CSDN主页YAML墨韵 学如逆水行舟,不进则退。学习如赶路,不能慢一步。 目录 一、项目简介 二、开发技术与环…