Rocket消息存储

news2025/1/18 11:00:51

一、存储介质

● 关系型数据库DB

Apache下开源的另外一款MQ—ActiveMQ (默认采用的KahaDB做消息存储)可选用JDBC的方式来做消息持久化,通过简单的xmI配置信息即可实现JDBC消息存储。由于,普通关系型数据库(如Mysql)在单表数据量达到千万级别的情况下,其IO读写性能往往会出现瓶颈。在可靠性方面,该种方案非常依赖DB,如果一旦DB出现故障,则MQ的消息就无法落盘存储会导致线上故障

● 文件系统

目前业界较为常用的几款产品(RocketMQ/Kafka/RabbitMQ)均采用的是消息刷盘至所部署虚拟机/物理机的文件系统来做持久化(刷盘-般可以分为异步刷盘和同步刷盘两种模式)。消息刷盘为消息存储提供了一种高效率、可靠性和高性能的数据持久化方式。除非部署MQ机器本身或是本地磁盘挂了,否则一般是不会出现无法持久化的故障问题。

性能对比:文件系统>关系型数据库DB

二、消息的存储和发送

1)消息存储

目前的高性能磁盘,顺序写速度可以达到600MB/s,超过了一般网卡的传输速度。

但是磁盘随机写的速度只有大概1 00KB/s,和顺序写的性能相差6000倍!

因为有如此巨大的速度差别,好的消息队列系统会比普通的消息队列系统速度快多个数量级。

RocketMQ的消息用顺序写,保证了消息存储的速度。

2)存储结构

RocketMQ消息的存储是由ConsumeQueue和CommitLog配合完成的,消息真正的物理存储文件是CommitLog,ConsumeQueue 是消息的逻辑队列,类似数据库的索引文件,存储的是指向物理存储的地址。每个Topic下的每个Message Queue都有一个对应的ConsumeQueue文件。

 

● 消息存储架构图中主要有下面三个跟消息存储相关的文件构成。

(1) CommitLog:消息主体以及元数据的存储主体,存储Producer端写入的消息主体内容,消息内容不是定长的。单个文件大小默认1G,文件名长度为20位,左边补零,剩余为起始偏移量,比如000000000000000000代表了第一个文件,起始偏移量为0,文件大小为1G=1073741824;当第一个文件写满了,第二个文件为00000000001073741824,起始偏移量为1073741824,以此类推。消息主要是顺序写入日志文件,当文件满了,写入下一个文件;

(2) ConsumeQueue:消息消费队列,引入的目的主要是提高消息消费的性能

RocketMQ是基于主题topic的订阅模式,消息消费是针对主题进行

如果要遍历commitlog文件根据topic检索消息是非常低效。

Consumer即可根据ConsumeQueue来查找待消费的消息。

其中,ConsumeQueue (逻辑消费队列)作为消费消息的索引:

保存了指定Topic下的队列消息在CommitLog中的起始物理偏移量offset、消息大小size、消息Tag的HashCode值。

consumequeue文件可以看成是基于topic的commitlog索引文件,故consumequeue文件夹的组织方式如下:

topic/queue/file三层组织结构

具体存储路径为:$HOME/store/consumequeue/{topic}/{queueld}/{fileName}。

consumequeue文件采取定长设计,每个条目共20个字节,分别为:

8字节的commitlog物理偏移量、4字节的消息长度、8字节tag hashcode

单个文件由30W个条目组成,可以像数组一样随机访问每一个条目

每个ConsumeQueue文件大小约5.72M;

(3) IndexFile:IndexFile (索引文件)提供了一种可以通过key或时间区间来查询消息的方法。

1. Index文件的存储位置是:$HOME/store/index/${fiTeName}

2.文件名fileName是以创建时的时间戳命名的

3.固定的单个IndexFile文件大小约为400M

4.一个IndexFile可以保存2000W个索引

5. IndexFile的底层存储设计为在文件系统中实现HashMap结构,故rocketmq的索引文件其底层实现为hash索引.

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

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

相关文章

API数据接口该怎么对接

随着互联网和移动互联网的发展,API(Application Programming Interface)接口的作用越来越重要。API接口将各种平台相互连接,使得不同系统的信息可以互相获取和使用,大大提高了系统的互操作性和开发效率。本文将介绍如何…

Delphi 中接口实现:Implementing Interfaces

目录 一、类声明(Class Declarations) 二、方法解决说明(Method Resolution Clause) 三、更改继承实现(Changing Inherited Implementations) 四、通过委托实现接口(Implementing Interface…

决策树算法:随机森林民主算法【02/2】

决策树民主:随机森林算法 一、介绍: 记住您在阅读亚马逊上的所有评论后进行的最后一次购买,或者在查看 IMDb 评级后您观看的以前的电影。人类是社会动物,他人的意见和行为自然会影响我们。我们的决定在很大程度上取决于“群体智慧…

书单背景图片哪里找?如何制作成视频?

有没有小伙伴们发现,如今很多热门的短视频平台有很多使用书单文案制作的视频,很多情感博主会配上一些精致的图片,唯美的背景承载着一些美好的文案内容。这种类型的视频让不少的小伙伴都想制作专属于自己的视频来投稿,那么小伙伴们…

泡泡玛特上半年收入超28亿元 净利润超去年全年

8月22日,泡泡玛特发布2023中期业绩。数据显示,上半年实现营收28.14亿元,经调整净利润5.35亿元,同比增长42.3%,其中净利润4.77亿元,超去年全年净利润。海外业务延续高速增长态势并首次披露利润情况&#xff…

FOC控制框架图

pmsm电机数学模型以及FOC控制框图(开源小项目FOC控制BLDC电机)_foc 框图_栋哥爱做饭的博客-CSDN博客 电机控制----FOC框架讲解_foc电机控制_修才生的博客-CSDN博客

pdf编辑文字怎么编辑?这几种简单编辑方法看一看

pdf编辑文字怎么编辑?PDF文件是一种普遍的文档格式,但是在编辑时却比较困难。幸运的是,有许多PDF编辑器可以帮助我们轻松地编辑PDF文件。本文将介绍一些简单的PDF编辑方法,跟着我一起来看看吧! 第一种方法:…

2.4G芯片G350规格书介绍,小体积易开发

给大家介绍一款2.4g芯片,G350是宇凡微电子开发的一款低成本、高集成度的无线收发芯片,内置了发射机、接收机、频率综合器和GFSK调制解调器,以满足各种无线通信需求。无论是在电子标签、无线遥控、无线键盘鼠标、智能家居、工业通信还是商用近…

vue页面中想在input框用户输入的参数后加单位的方法

<el-form-item label"金重" prop"weight"><el-input v-model"form.weight" placeholder"请输入金重"><template #append><div>g</div></template></el-input></el-form-item>

项目开展CICD的实践探路 | 京东物流技术团队

本文介绍了作者对CICD的理解以及在项目中开展CICD的几种场景&#xff0c;总结了每种场景实践的关键节点、带来的收益&#xff0c;以及结合具体项目开展的实际应用。读者可以借鉴本文中描述的场景&#xff0c;或借鉴文中提到的实践方式&#xff0c;在项目中开展CICD&#xff0c;…

【PHP】PHP开发教程-PHP开发环境安装

1、PHP简单介绍 PHP&#xff08;全称&#xff1a;Hypertext Preprocessor&#xff09;是一种广泛使用的开放源代码脚本语言&#xff0c;特别适用于Web开发。它嵌入在HTML中&#xff0c;通过在HTML文档中添加PHP标记和脚本&#xff0c;可以生成动态的、个性化的Web页面。 PHP最…

Java小项目|拼图小游戏|黑马

项目技术需求 Java基础 基本if、forio流File集合JFrame【看得懂就行】 项目素材以及打包exe&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rPazJezTwS9O6e8BoYNIYA?pwd6666 项目运行截图 项目来源 哔哩哔哩-黑马程序员上 哔哩哔哩-黑马程序员下 项目介绍&…

mac电脑免费垃圾清理软件有哪些?CleanMyMac好用不好用?

CleanMyMac是一款功能强大的mac垃圾清理软件&#xff0c;它可以帮助我们快速扫描和删除mac上的垃圾文件&#xff0c;释放磁盘空间&#xff0c;提升系统速度。本文将为你介绍CleanMyMac这款mac垃圾清理软件&#xff0c;以及CleanMyMac怎么关闭开机启动。 mac垃圾清理软件有很多…

SAP 资产屏幕增强(AS01/AS02/AS03)

导语&#xff1a;最新需要在资产屏幕上增加增强字段&#xff08;效果图在最后&#xff09;&#xff0c;下面分享一下实现过程。 一、在表中增强字段 本次增强的是【资产主数据->源】中的字段&#xff0c;选择储存在ANLU表中。 二、创建屏幕 在函数组XAIS中创建屏幕9001 在…

unity 模型显示在UI上 并交互(点击、旋转、缩放)

1.在Assets创建 Render Texture&#xff08;下面会用到&#xff09;&#xff0c;根据需要设置Size 2.创建UIRawImage&#xff0c;并把Render Texture赋上 3.创建相机&#xff0c;如下图&#xff1a; 4.基本UI的准备工作完成&#xff0c;剩下的就是代码了&#xff0c;值得一提&a…

qt 实现音视频的分贝检测系统

项目场景&#xff1a; 目前的产品经常播放m3u8流&#xff0c;有的视频声音正常&#xff0c;有的视频声音就偏低&#xff0c;即使放到最大音量声音也是比较小&#xff0c;所以就产生了某种需求&#xff0c;能否自动感知视频声音的大小&#xff0c;如果发现声音比较小的情况&…

vue3项目初始

yarn add types/node -D是这个 下面 少到了S 这一步 就是 配置配置 src

高通 A12 设置-存储 存储总大小显示不正确问题

总存储大小计算原理&#xff1a; 系统获取存储大小是通过获取”/system”和”/data” 两个Directory 的和来计算的&#xff0c;即Environment.getDataDirectory().getTotalSpace() Environment.getRootDirectory().getTotalSpace() 问题一 &#xff1a;实际存储大小大于等于1…

网安周报|国防承包商Belcan泄露了带有漏洞列表的管理员密码

1.国防承包商Belcan泄露了带有漏洞列表的管理员密码 网络新闻研究团队发现了一个开放的 Kibana 实例&#xff0c;其中包含有关 Belcan、其员工和内部基础设施的敏感信息。Belcan 是一家政府、国防和航空航天承包商&#xff0c;提供全球设计、软件、制造、供应链、信息技术和数字…

企业在选择低代码平台时,应该注意哪些方面?

在 IT行业&#xff0c;“低代码”这个词可以说是近几年的热词了。低代码开发平台&#xff08;Low-Code Platform&#xff09;是一种新型的软件开发工具&#xff0c;它可以通过少量代码快速开发应用程序。通过采用低代码技术&#xff0c;开发者可以减少自己编写和测试应用程序的…