RocketMQ消息存储之刷盘机制(原理篇)

深度解析RocketMq源码-持久化组件(三) 刷盘策略 同步刷盘主要是在发送刷盘请求过后,会同步等待刷盘结果,这是它不会丢数据的根本原因。异步刷盘有两种模式定时模式和实时模式。实时模式就是数据写入后立刻刷盘,但是调用线程并不会阻塞等待刷盘结果;定时模式就是会启动一个线程每过500ms写入数据,这样做可以增大一次刷盘的条数,减少磁盘IO。 阅读详情

一、前言

        RocketMQ的刷盘机制是一种确保消息可靠性的机制,简单来说就是Broker收到消息后,将消息存储到磁盘上。这样可以解决几个问题:

  1. 存储空间问题。内存空间有限,存入磁盘可以维护更多消息。
  2. 消息可靠性问题。消息存入磁盘后,即使断电了,重启后便可恢复消息。

二、刷盘机制原理

        RocketMQ的刷盘机制原理可以参考下图。下图为官方文档的原理图,主要说明两种刷盘机制:左图是同步刷盘机制,右图是异步刷盘机制。

 

1、同步刷盘

        上面左图代表同步刷盘机制。消息从Producder端发送出去后,被Broker接收,Broker接收到消息后将消息写入内存的PageCache后,立即通知刷盘线程进行刷盘,当前线程等待刷盘线程的通知。刷盘线程开始进行刷盘操作,刷盘完毕后唤醒之前等待的线程,再返回写成功状态,最后Producer会收到消息发送成功的ACK。

2、异步刷盘

        右图代表异步刷盘机制。消息从Producder端发送出去后,被Broker接收到,Broker端接收到消息后,消息被写入PageCache后立即返回写成功给Producer端。然后另一个异步线程专门会将PageCache中的数据写到磁盘里,确保消息的持久化。

3、同步和异步刷盘的比较

        从上图的比较可以发现同步和异步刷盘的主要区别在于消息写入PageCache后是否立即返回写状态。可以从几个维度分析两者的差异:

  • 吞吐量。由于异步刷盘在写入PageCache后立即返回,没有经历IO操作,因此吞吐量比同步刷盘的高很多。
  • 可靠性。同步刷盘是在完全写磁盘成功后才算成功,而异步刷盘是写入PageCache就返回,PageCache本质就是内存,假如在异步线程写磁盘之前机器断电了,消息还是可能丢失的,因此可靠性方面同步刷盘较高。
  • 性能方面。同步刷盘写入磁盘后才算成功,而异步刷盘只需要写入内存就算成功,因此异步刷盘性能高于同步刷盘。
  • 适用场景。同步刷盘可靠性高,因此适用金融等对数据要求较高的场景。异步刷盘可靠性相对来说低一些,但是性能好,因此适合要求高吞吐和高性能的场景。

4、刷盘机制配置

        刷盘方式可以通过Broker配置文件里的flushDiskType参数设置,这个参数有两种值:

  • SYNC_FLUSH (同步刷盘)。
  • ASYNC_FLUSH (异步刷盘)。

三、主流MQ刷盘机制对比

        目前很多主流MQ都有自己的刷盘机制,可以从下表对比其中的差异。

MQ名

刷盘机制

刷盘配置

RocketMQ

同步刷盘、异步刷盘

Broker配置文件里的flushDiskType里配置

Kafka

默认异步刷盘,可以通过修改参数变成同步刷盘

Broker配置

  1. log.flush.interval.messages:多少条消息刷盘一次
  2. log.flush.interval.ms:刷盘间隔时间
  3. log.flush.scheduler.interval.ms:周期性刷盘

RabbitMQ

异步持久化:根据时间段批量将内存中的数据刷新到磁盘

  1. 队列持久化:queue_declare创建队列时声明durable=true
  2. 消息持久化:调用basic_publish方法时的属性delivery_mode=2。

四、总结

        本文主要介绍了RocketMQ的刷盘机制,从多个维度对比RocketMQ不同刷盘机制的区别,最后比较几种主流MQ的刷盘机制。

RocketMQ系列3——消息存储 数据持久化存储,当MQ收到一条消息后,需要向生产者返回一个ACK响应,并将消息存储到磁盘文件。MQ Push一条消息给消费者后,等待消费者的ACK响应,需要将消息标记为已消费。如果没有标记为消费,MQ会不断的尝试往消费者推送这条消息。MQ需要定期删除一些过期的消息,这样才能保证服务一直可用。 阅读详情

相关推荐

RocketMQ 怎么保证消息的可靠性?

RocketMQ 是一个高可靠、高可用的分布式消息中间件,它通过多种机制来保证消息的可靠性,确保消息在发送、存储和消费过程中不丢失、不重复。通过这些机制,RocketMQ 能够确保消息在发送、存储和消费过程中的可靠性,适用于高并发、高可用的分布式场景。如果消费者重启或发生故障,可以从上次提交的 Offset 开始继续消费,避免消息丢失或重复消费。主 Broker 将消息同步复制到 Slave Broker,确保消息的高可用性。RocketMQ 会记录详细的日志,包括消息发送、存储和消费的日志。

猪猪 1313

RocketMQ 的刷盘机制、主从复制、存储形式

rocketMQ刷盘机制 rocketMQ主从复制 rocketMQ存储形式

SO_zxn的博客 2225

RocketMQ5.0消息存储<四>_刷盘机制

org.apache.rocketmq.store.CommitLog.DefaultFlushManager#handleDiskFlush是刷盘核心方法,含有同步、异步刷盘逻辑,如下代码所示。org.apache.rocketmq.store.CommitLog.FlushManager是刷盘管理器接口,其接口的实现类是org.apache.rocketmq.store.CommitLog.DefaultFlushManager刷盘管理器实现类维护刷盘线程执行周期性刷盘操作。开启堆外内存池的刷盘流程。

专搞技术的小兔子 444

RocketMQ 是如何刷盘的?

RocketMQ 的刷盘机制通过同步刷盘和异步刷盘两种方式,确保消息在高性能和高可靠性之间找到平衡。理解其刷盘机制及源码实现,对于优化和调试RocketMQ系统具有重要意义。因此,还是建议有时间读读 RocketMQ的源码。

m0_54369189的博客 1666

RocketMQ - RocketMQ是如何实现同步刷盘以及异步刷盘两种策略的?

上面代码我们就看的很清晰了,其实他里面是根据你配置的两种不同的刷盘策略分别处理的,我们先看第一种,就是同步刷盘的策略是如何处理的。FlushCommitLogService其实是一个线程,他是个抽象父类,他的子类是CommitRealTimeService,所以真正唤醒的是他的子类代表的线程。比如是同步刷盘还是异步刷盘,如果是同步刷盘,那么此时就会直接把内存里的数据写入磁盘文件,如果是异步刷盘,那么就是过一段时间之后,再把数据刷入磁盘文件里去。那么今天我们来看看底层到底是如何执行不同的刷盘策略的。

yang的博客 477

基于STM32的无人机智能避障与路径规划系统设计

本文详细介绍了基于STM32的无人机智能避障与路径规划系统设计,涵盖硬件选型、传感器组合、软件架构及算法实现。通过多传感器数据融合和改进的VFH+算法,系统在复杂环境中实现92%以上的避障成功率。STM32微控制器的实时性和低功耗特性为无人机自主导航提供了可靠保障,适用于工业巡检、仓储物流等场景。

blockchain9miner的博客 876

【RocketMQ 消息中间件】RocketMQ篇之-消息存储 为什么快 CommitLog ConsumeQueue IndexFile 刷盘机制 同步 异步

为什么快?顺序写、零拷贝 CommitLog:RocketMQ中存储所有消息的核心文件,保存消息的完整内容。ConsumeQueue:消费者队列文件,用于加速消息消费,存储消息的索引信息。IndexFile:索引文件,用于快速检索消息,存储消息的Key和物理偏移量。这三种文件共同协作,确保了RocketMQ的高性能和高可靠性。CommitLog负责消息的存储,ConsumeQueue提高了消息的消费效率,而IndexFile则提供了消息的快速检索能力。

不想当吗喽的博客 2333

Visionpro 使用CogPMAlignTool工具提取匹配轮廓点

【代码】Visionpro 使用CogPMAlignTool工具提取匹配轮廓点。

weixin_43947315的博客 2091

RocketMQ消息存储

目录何时存储消息消息存储介质磁盘存储速度零拷贝技术消息存储结构刷盘机制同步刷盘异步刷盘配置方式消息主从复制同步复制异步复制配置方式负载均衡Producer负载均衡Consumer负载均衡集群模式广播模式消息重试如何让消息进行重试重试如何处理重试次数:关于MessageId:配置覆盖:死信队列消息幂等消息幂等的必要性发送时消息重复投递时消息重复负载均衡时消息重复(包括但不限于网络抖动、Broker 重启以及订阅方应用重启)处理方式 何时存储消息 MQ收到一条消息后,需要向生产者返回一个ACK响应,并将消息存

zhengkun51的博客 2348

避坑指南:OpenWRT改AP模式必做的5个关键设置(DHCP/防火墙/WAN口处理)

本文详细解析了将OpenWRT设备从路由模式切换为AP模式时,必须完成的五个关键设置步骤。核心在于理解AP模式本质是带无线的智能交换机,需彻底关闭DHCP服务、调整防火墙策略、正确桥接所有物理接口(包括WAN口处理),并集成无线网络,以确保设备能透明接入主路由网络,避免出现设备隔离或无法互访等常见问题。

t1u2v的博客 732

VXWorks6.9 + Workbench3.3 开发环境部署

VxWorks6.9 + Workbench3.3的安装部署,以及简单示例项目的创建、编译和运行

Mr.Sugarcane 5452

【RocketMQ】7.消息存储 存储介质、RMQ消息存储和发送、消息存储结构、刷盘机制

消息存储 分布式队列因为有高可靠性的要求,所以数据要进行持久化存储 消息生成者发送消息 MQ收到消息,将消息进行持久化,在存储中新增一条记录 返回ACK给生产者 MQ push 消息给对应的消费者,然后等待消费者返回ACK 如果消息消费者在指定时间内成功返回ack,那么MQ认为i消息消费成功,在存储中删除消息,即执行第6步;如果MQ在指定时间内没有收到ACK,则认为消息消费失败,会尝试重新push消息,重复执行4.5.6步骤 MQ删除消息 存储介质 关系型数据库DB 文件系统 性能对比 文件系

qmqm33的博客 659

数据预处理

数据预处理 数据预处理(数据清洗)是数据挖掘过程中的重要一步,它主要包括数据清洗,数据集成,数据变换和数据规约。 在我们进行数据挖掘的过程中,大量的原始数据中存在着大量有问题的数据(脏数据)比如有缺失值的,不一致的,有异常的,大量重复的数据等。这些脏数据会严重影响到数据挖掘建模过程的执行效率,也可能会使挖掘结果产生偏差。通过数据预处理(数据清洗)可以提高数据的质量,更好的适应特定的挖掘技术及工具。...

CJW的博客 9929

【消息队列RocketMQ】四、RocketMQ 存储机制与性能优化

本文详细介绍了 RocketMQ 在 CentOS 7 下的存储机制,包括存储文件结构、消息读写原理,以及相关的配置文件修改和命令操作。同时,深入探讨了性能优化策略,从刷盘机制、文件存储、内存映射等多个方面进行分析。通过合理配置和优化,能够充分发挥 RocketMQ 的性能优势,满足不同业务场景的需求。

qq_58611691的博客 1734

Vue - 解决 Property or method “__v_isRef“ is not defined on the instance but referenced(浏览器控制台报错,代码没错)

vue,vue2控制台报错,vue报错Propertyormethod"__v_isRef"isnotdefinedontheinstancebutreferenced,vue代码没问题,但是报错Propertyormethod"__v_isRef"isnotdefinedontheinstancebutreferenced,vue2如何解决报错,vue怎么解决报错问题,vue2Propertyormethod"__v_isRef"isnotdefi

🏆 前端领域优质创作者 4501

RT-Thread littefs控制GD32F4xx片内Flash

GD32F4xx RT-Thread下使用littefs 控制片内flash 调试记录

madao1234的博客 995

RocketMQ文件刷盘机制深度解析与Java模拟实现

本文深入解析了RocketMQ的文件刷盘机制,包括其底层原理、业务场景、概念、功能点等。通过模拟实现,我们进一步理解了同步刷盘和异步刷盘的区别和应用场景。未来,随着硬件性能的提升和分布式存储技术的发展,RocketMQ的刷盘机制有望进一步优化,以提供更高的性能和更可靠的数据持久化能力。这将使RocketMQ在更多的应用场景中发挥其优势,提供更高效、更稳定的消息传递服务。作为Java资深开发专家,我们应该不断学习和探索新的技术和算法,以应对日益复杂的业务需求和技术挑战。

喜欢猪猪 1409

通过实例讲解瀑布模型

在电子商城开发中,瀑布模型如同 “工业时代的流水线”—— 能通过标准化流程交付高质量、高合规性的系统,但也可能因缺乏灵活性而错失市场机会。其优势与缺点本质上源于同一核心特征:严格的阶段性与文档驱动。决策建议若开发传统型、长周期、需求固定的电子商城(如企业内部采购平台),可优先选择瀑布模型,并通过 “需求预验证 + 模块化设计” 降低风险;若开发创新型、短周期、需快速迭代的电商平台(如社交电商、跨境电商),建议采用敏捷模型或混合模型(如瀑布 + Scrum),平衡规范性与响应速度。

跟佟格湾一起学习计算机知识吧~ 271

RocketMQ源码分析 - 消息存储

RocketMQ源码分析 - 消息存储消息存储1) 消息存储核心类2) 消息存储流程3) 存储文件4) 存储文件内存映射1 MappedFileQueue2 MappedFile3 TransientStorePool5) 实时更新消息消费队列与索引文件1 转发到ConsumerQueue2 转发到Index6) 消息队列喝索引文件恢复1 存储文件加载2 正常恢复3 异常恢复7) 刷盘机制1 同步刷盘2 异步刷盘8) 过期文件删除机制9) 小结 消息存储 1) 消息存储核心类 private final

mry6的博客 1613

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

RocketMQ是怎么存储消息的?

文章目录1. rocketMQ存储消息的时机2. rocketMQ的消息读写速度如何保证?3. 消息存储结构 1. rocketMQ存储消息的时机         RocketMQ对消息的操作是在内存中,保证了消息的处理效率,但是为了防止rocketMQ宕机导致消息丢失,所以需要对消息进行持久化保存。 MQ收到一条消息后,需要向生产者返回一个ACK响应,并将消息存储起来。 MQ推一条消息给消费者后,等待消费者的ACK响应,需

qq_1149513559的博客 3158

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

RocketMQ~刷盘机制、主从复制方式、存储机制

生产者发布MQ给Brocker,Brocker在存储这些数据的时候,需要进行刷盘,分为同步刷盘和异步刷盘。在同步刷盘中需要等待一个刷盘成功的ACK,同步刷盘对MQ消息可靠性来说是一种不错的保障,但是性能上会有较大影响,一般地适用于金融等特定业务场景。而异步刷盘往往是开启一个线程去异步地执行刷盘操作。消息刷盘采用后台异步线程提交的方式进行,降低了读写延迟,提高了MQ的性能和吞吐量,一般适用于如发验证码等对于消息保证要求不太高的业务场景。

Shangxingya的博客 1474

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

RocketMQ(七)RocketMQ消息生产及消息储存机制

RocketMQ(五)RocketMQ消息生产及消息储存机制

一恍过去 1万+

RocketMQ 消息存储流程

基于 RocketMQ 4.2.0 版本进行的源码分析。本文讲述 RocketMQ 存储一条消息的流程。

CoderChronicle的博客 1279

rocketmq源码之消息存储

文章目录2.4.1 消息存储核心类2.4.2 消息存储流程2.4.3 存储文件2.4.4 存储文件内存映射1)MappedFileQueue2)MappedFile3)TransientStorePool2.4.5 实时更新消息消费队列与索引文件1)转发到ConsumerQueue2)转发到Index2.4.6 消息队列和索引文件恢复1)存储文件加载2)正常恢复3)异常恢复2.4.7 刷盘机制同步刷盘异步刷盘2.4.8 过期文件删除机制2.4.9 小结 2.4.1 消息存储核心类 private fina

batman 940

RocketMQ Broker的刷盘机制

刷盘机制是指将数据从内存写入磁盘的过程。在RocketMQ中,消息首先被保存在内存中,然后通过刷盘机制将消息持久化到磁盘,以防止数据丢失。刷盘是保证消息可靠性的重要手段,是RocketMQ实现消息持久化的关键部分。

My_wife_QBL的博客 809
上一篇: RocketMQ消息存储之物理存储与逻辑存储
下一篇: Spring参数校验和全局异常处理
datastructure18
博客等级 码龄19年 6粉丝 10原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值