RocketMQ的消息存储(持久化机制)

news2025/1/16 20:05:15

一、RocketMQ的主要存储结构

RocketMQ 主要存储的文件包括CommitLog文件、ConsumeQueue 文件、IndexFile文件。
在这里插入图片描述

1.CommitLog

RocketMQ将所有主题的消息都存储在CommitLog。Producer 发送消息至 Broker 端,然后 Broker 端使用同步或者异步的方式对消息刷盘持久化,保存至 CommitLog 中。
Commitlog 文件存储目录为${ROCKET_HOME}/store/commitlog目录,每一个文件默认1G,一个文件写满后再创建另外一个,以该文件中第一个偏移量为文件名,偏移量小于20位用0 补齐。
在这里插入图片描述
消息在commitLog中的存储格式为(前4个字节)总长度+消息体,所以在commitLog获取消息需要offset,再根据总长度,获取消息体的所有内容。
在这里插入图片描述

2.ConsumeQueue

Broker上的分片如下图,每一个topic的消息分布在不同的broker中,每一个broker又有不同的Queue(或者叫messageQueue)。每一个Queue的存储物理文件就是consumeQueue。RocketMQ设计了ConsumeQueue作为索引文件,能够根据topic检索消息。

ConsumeQueue的一级目录是Topic,二级目录为哪个队列。
在这里插入图片描述
每个ConsumeQueue默认包含30万个索引,每个索引有20字节

  • CommitLog offset:在CommitLog的偏移
  • size:消息大小
  • tag hashcode:tag的hash值
    在这里插入图片描述
    我们可以根据queue里的消息去CommitLog找到消息的具体内容。

3.IndexFile索引文件

每一条消息除了Topic和tag以外,还有key可以帮助检索。IndexFile就是存了Key的hash值来检索消息的。
在这里插入图片描述
在 Broker 端,通过Key 来计算 Hash 槽的位置,从而找到 Index 索引数据。从 Index 索引中拿到消息在CommitLog的offset。

二、RocketMQ的落盘机制

1. PageCache

Broker将数据写入CommitLog文件的时候,其实不是直接写入底层的物理磁盘文件,而是先进入OS的 PageCache 内存缓存中,后续由OS后台线程异步化的将OS PageCache中的数据刷入底层的磁盘文件中。
在这里插入图片描述
在上述这种异步刷盘的模式下,Producer将消息发送给Broker,Broker将消息写入OS PageCache中,就会直接返回ACK给生产者,生产者收到ACK消息就认为写入成功了。

有异步刷盘就有同步刷盘,同步刷盘主要的不同点就是,只有Broker强制把这条消息刷入底层的磁盘文件后,才会返回ACK给生产者。

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

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

相关文章

Java带APP的智慧工地项目源码

智慧工地利用移动互联、物联网、云计算、大数据等新一代信息技术,彻底改变传统施工现场各参建方的交互方式、工作方式和管理模式,为建设集团、施工企业、监理单位、设计单位、政府监管部门等提供一揽子工地现场管理信息化解决方案。 智慧工地项目技术架构…

vuejs - - - - - 递归组件的实现

递归组件的实现 1. 需求描述:2. 效果图:3. 代码3.1 封装组件代码3.2 父组件使用 1. 需求描述: 点击添加行,增加一级目录结构当类型为object or array时,点击右侧➕,增加子集点击右侧🚮&#x…

ETHERNET IP站转MODBUS RTU协议网

产品介绍 JM-EIP-RTU是自主研发的一款ETHERNET/IP从站功能的通讯网关。该产品主要功能是将各种MODBUS-RTU设备接入到ETHERNET/IP网络中。 JM-EIP-RTU连接到ETHERNET/IP总线中做为从站使用,连接到MODBUS-RTU总线中做为主站或从站使用。 产品参数 技术参数 l 网关…

leetcode:66. 加一(python3解法)

难度:简单 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输入&…

【漏洞复现系列】二、weblogic-cve_2020_2883(RCE/反序列化)

Key words:T3协议,weblogic Server,反序列化 2.1、漏洞原理 ​cve_2020_2883 远程代码执行漏洞存在于 WebLogic Server 核心组件中,允许未经身份验证的攻击者通过 T3 协议网络访问并破坏易受攻击的 WebLogic Server,成功的漏洞利…

亚马逊、沃尔玛测评养号、采退需要解决防关联哪些问题?

大家好我是跨境平台测评养号七年从事经验的珑哥。养号环境软件开发,深度解决平台矩阵养号防关联,砍单,F号问题。 今天我给大家讲一下做亚马逊、沃尔玛测评项目需要用到的防关联、防封号环境的一些底层技术原理。这里讲的内容我相信很少有人能…

思科CCNA实验配置-视频教程

【微|信|公|众|号:厦门微思网络】 【微思网络www.xmws.cn,成立于2002年,专业培训21年,思科、华为、红帽、ORACLE、VMware等厂商认证及考试,以及其他认证PMP、CISP、ITIL等】 1: 思科CCNA实验配置——IOS基本…

vscode vue html 快捷键

css文件 选择多行 按下ctrl不放 按下鼠标滚轮不放&#xff08;鼠标中键&#xff09; 鼠标向下移动 同时修改多个相同的字符串 <style> .base-goods-item li {width: 304px;height: 404px;background-color: #eef9f4; } .base-goods-item li {display: block; } .base-…

IPEmotion 2023 R2支持快速导入MDF4文件

新发布的IPEmotion 2023 R2提供了多种新功能&#xff0c;其中一大新功能是支持快速导入MDF4文件和新的ASAM CMP标准。此外&#xff0c;现在还可用注释标记测量文件中的相关部分。 — 创新一览 — ■ 快速导入MDF4文件 • 在MDF4的导入选项中新增“加载行为”选项&#xff1a;…

【深度学习】Pytorch 系列教程(一):PyTorch数据结构:1、Tensor(张量):维度(Dimensions)、数据类型(Data Types)

目录 一、前言 二、实验环境 三、PyTorch数据结构 0、分类 1、Tensor&#xff08;张量&#xff09; 1. 维度&#xff08;Dimensions&#xff09; 0维&#xff08;标量&#xff09; 1维&#xff08;向量&#xff09; 2维&#xff08;矩阵&#xff09; 3维张量 2. 数据…

clickhouse学习之路----clickhouse的特点及安装

clickhouse学习笔记 反正都有学不完的技术&#xff0c;不如就学一学clickhouse吧 文章目录 clickhouse学习笔记clickhouse的特点1.列式存储2. DBMS 的功能3.多样化引擎4.高吞吐写入能力5.数据分区与线程级并行 clickhouse安装1.关闭防火墙2.CentOS 取消打开文件数限制3.安装依…

IDEA回滚代码

1、查看提交日志&#xff0c;选择回滚到指定提交 2、选择Hard&#xff0c;点击reset Reset Type 有三种&#xff1a; mixed 默认方式&#xff0c;只保留源码&#xff0c;回退commit和index信息 soft 回退到某个版本&#xff0c;只回退了commit的信息&#xff0c;不会恢复到in…

有效的网络带宽监控策略

世界各地的企业正在采用多种策略来减少瓶颈、增强网络性能并最大限度地提高投资回报率&#xff0c;以跟上不断发展的混合基础架构的步伐。虽然这些策略因组织而异&#xff0c;并提供了自己的好处&#xff0c;但它们可能会使 IT 基础架构的监控方式复杂化。在设计有效的监控策略…

博弈论——连续产量古诺模型

连续产量古诺模型 连续产量古诺模型是博弈论中非常经典的模型&#xff0c;以两厂商连续产量古诺博弈为例&#xff1a; 1、模型建立 Player&#xff1a;两个供应相同产品的厂商 产量&#xff1a;厂商1的产量为q1&#xff0c;厂商2的产量为q2&#xff0c;市场总供给为Qq1q2。…

【二、安装centOS】

下载 地址&#xff1a;https://mirrors.aliyun.com/centos/ 地址 1、https://mirrors.aliyun.com/centos/7.9.2009/ 2、https://mirrors.aliyun.com/centos/7.9.2009/isos/ 3、https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/ 选哪一个 可以选择第一个&#xff0…

知识图谱基本工具Neo4j使用笔记 五 :APOC插件安装及简单应用

文章目录 一、使用场景二、系统说明三、配置安装1. 插件下载2. 文件下载说明3. 版本对应4. 安装位置5. 修改配置文件6. 注意问题7. web端启动&#xff1a;测试 四、简单应用1. 编辑距离2. 基于编辑距离的相似度3. 模糊匹配 一、使用场景 APOC&#xff08;Awesome Procedures o…

等差数列和等比数列 常用公式

等差数列 定义 通项公式 &#xff0c; 公差 &#xff0c; 前n项和公式 中项公式 下标&#xff1a;mnpq&#xff0c;则 等比数列 定义 通项公式 &#xff0c; 公比 &#xff0c; 前n项和公式 &#xff0c; 中项公式 下标&#xff1a;mnpq&#xff0c;则

数据库JDBC编程

JDBC JDBC是干啥的呢&#xff1f; 简单来说就是用java代码操作数据库 各种数据库&#xff0c;在开发的时候&#xff0c;就会提供一组编程接口&#xff08;API&#xff09; API&#xff1a;Application Program Interface 简单来说就是有个软件&#xff0c;这个软件给你一些功能…

Arduino程序设计(十三)触摸按键实验(TTP223)

触摸按键实验 前言一、TTP223触摸按键模块二、触摸按键控制LED二、触摸按键状态检测 前言 本文介绍触摸按键控制LED的原理及实验&#xff0c;主要内容有&#xff1a;1、介绍TTP223触摸按键模块&#xff1b;2、触摸按键控制LED&#xff1b;3、触摸按键状态检测。 一、TTP223触摸…

竞赛选题 基于深度学习的植物识别算法 - cnn opencv python

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的植物识别算法 ** …