一、前言

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消息存储之刷盘机制(原理篇)相关推荐

  1. RocketMQ消息存储、刷盘、负载均衡

    消息存储 消息存储是RocketMQ中最为复杂和最为重要的一部分. 消息存储总体架构 消息存储架构图: minOffset:当前队列的最小消息偏移量,如果消费时指定从最早消费,就是从该偏移量消费. m ...

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

    目录 一.刷盘概览 二.Broker刷盘机制 1. 同步刷盘 2. 异步刷盘 1):未开启堆外内存池 2):开启堆外内存池 三.参考资料 一.刷盘概览 RocketMQ存储与读写是基于JDK NIO的 ...

  3. RocketMQ刷盘机制

    概览 RocketMQ的存储读写是基于JDK NIO的内存映射机制的,消息存储时首先将消息追加到内存中.在根据不同的刷盘策略在不同的时间进行刷盘.如果是同步刷盘,消息追加到内存后,将同步调用Mappe ...

  4. RocketMQ的刷盘机制

    RocketMQ需要将消息存储到磁盘上,这样才能保证断电后消息不会丢失.同时这样才可以让存储的消息量可以超出内存的限制.RocketMQ为了提高性能,会尽量保证磁盘的顺序写.消息在写入磁盘时,有两种写 ...

  5. 顺藤摸瓜RocketMQ之刷盘机制debug解析

    文章目录 Rocketmq 刷盘机制 三个文件 indexFile consumeQueue commitlog 异步刷盘 consumerqueue和indexfile文件是什么时候更新的 同步刷盘 ...

  6. 深入源码聊聊RocketMQ刷盘机制

    大家好,我是Leo. 今天聊一下RocketMQ的三种刷盘机制. 同步刷盘 异步刷盘(RocketMQ默认) 异步刷盘+缓冲区 出自微信公众号[欢少的成长之路] 本章概括 同步刷盘 整个同步刷盘策略由 ...

  7. RocketMQ的消息刷盘和消息双写

    详细介绍了RocketMQ的消息刷盘策略,以及RocketMQ的消息双写机制. 文章目录 1 RocketMQ的消息刷盘 2 RocketMQ的消息双写 1 RocketMQ的消息刷盘 同步刷盘:如上 ...

  8. mysql刷盘机制详解

    目录 刷盘机制总览 log buffer(innodb的,由存储引擎分配) binlog cache(由server分配) buffer pool 自适应刷脏页Adaptive Flushing 刷盘 ...

  9. MySQL数据和日志的刷盘机制以及双一配置

    详细介绍了MySQL数据和日志的刷盘机制以及双一配置,双一配置可以保证Mysql日志数据不丢失. 文章目录 1 内存数据的刷盘机制 2 MySQL数据的刷盘 2.1 刷盘数据来源 2.2 脏页以及刷盘 ...

最新文章

  1. 独立集,覆盖集,支配集,最大团,最大匹配
  2. ORACLE10g安装
  3. Qt Creator查找和更换
  4. Redis保存Java Session
  5. nodejs TCP server和TCP client如何建立连接
  6. 记事本linux命令换行符,Windows 10版记事本应用终于支持Linux/Mac换行符 排版不再辣眼睛...
  7. 热传递物理模型matlab,简单传热学计算机分析MatlabPDE二维不稳态焊接热传导求解.PPT...
  8. FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧间宏块(Inter)
  9. Java入门系列-24-实现网络通信
  10. Django:学习笔记(9)——用户身份认证
  11. 每日一九度之题目1021:统计字符
  12. 印象笔记保存html,印象笔记怎么保存网页 印象笔记保存网页教程
  13. 串口调试助手fx2n_PLC串口调试助手详细讲解(结合实操)
  14. AutoCAD中禁用shift+鼠标中键组合作为动态观察的功能
  15. 订单信息无法识别,建议联系卖家。 错误码:INVALID_PARAMETER
  16. codery-why蘑菇街商城项目梳理笔记
  17. python批量合并excel文件,后缀名为xls
  18. python-requests 模拟登陆京东
  19. [进程通信] 进程间通信 之 管道
  20. java工程师的工作述职报告,java程序员述职报告

热门文章

  1. 用户,角色,权限配置表
  2. 计算机高考怎么复习,高考倒计时30天,清北学霸倾情传授高效复习秘籍
  3. 关于 网页图片优化和体积压缩
  4. Java终止或暂停线程
  5. python 收取邮件 exchange_Exchange服务器之python 使用exchange发送邮件
  6. 一种基于物联网技术的能源物联网数据服务平台
  7. python汽车迷_Python学习—函数
  8. 开发过程中自己遇到的问题总结
  9. hiveSQL常见面试题
  10. 在Nvida TX1上搭建ROS