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

关于同步刷盘和异步刷盘

消息发给mq之后会存硬盘,存的时候也有区别,如果为了保证存储的效率,通常会先数据存到PAGECACHE缓存,mq将消息存到PAGECACHE缓存之后,就给broker一个响应结果, 然后另外有一个线程专门去做把PAGECACHE的数据写到磁盘里面,这个就是异步刷盘机制,

如果是同步刷盘的话,就是RocketMQ将消息写入内存的PAGECACHE后,立马就通知刷盘线程刷盘, 然后等待刷盘完成,刷盘线程执行完成后唤醒等待的线程,返回消息写 成功的状态。

同步刷盘:

在返回写成功状态时,消息已经被写入磁盘。具体流程是,消息写入内存的PAGECACHE后,立刻通知刷盘线程刷盘, 然后等待刷盘完成,刷盘线程执行完成后唤醒等待的线程,返回消息写成功
的状态。

异步刷盘:

在返回写成功状态时,消息可能只是被写入了内存的PAGECACHE,写操作的返回快,吞吐量大.当内存里的消息量积累到一定程度时,统一触发写磁盘动作,快速写入。

同步刷盘和异步刷盘区别

异步刷盘吞吐量更高,但是会有丢失消息的可能,因为你消息是会暂存到PAGECACHE这个内存,如果你有一些消息还没来得及写到硬盘中,此时这个broker服务宕机了,那你还没来得及写入到硬盘的消息就丢失了.

同步刷盘虽然吞吐量低,吞吐量比异步刷盘差很多,但是每过来一条数据都会立马写到磁盘上,这样就不会丢失消息.

刷盘机制配置

刷盘方式是通过Broker配置文件里的flushDiskType 参数设置的,这个参数被配置成SYNC_FLUSH (同步刷盘)、ASYNC_FLUSH (异步刷盘)中的 一个。

RocketMQ的刷盘机制相关推荐

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

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

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

    一.前言 RocketMQ的刷盘机制是一种确保消息可靠性的机制,简单来说就是Broker收到消息后,将消息存储到磁盘上.这样可以解决几个问题: 存储空间问题.内存空间有限,存入磁盘可以维护更多消息. ...

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

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

  4. RocketMQ刷盘机制

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

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

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

  6. RocketMQ消息刷盘

    RocketMQ消息刷盘 流程图 1.源码分析 RocketMQ 存储与读写是基于 JDK NIO 的内存映射机制( MappedByteBuffer )的,消息存储时首先将消息追加到内存,再根据配 ...

  7. mysql刷盘机制详解

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

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

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

  9. 【RocketMQ】消息的刷盘机制

    刷盘策略 CommitLog的asyncPutMessage方法中可以看到在写入消息之后,调用了submitFlushRequest方法执行刷盘策略: public class CommitLog { ...

最新文章

  1. 机器视觉图像采集卡的功能与应用
  2. 宏基因组学揭示海洋微生物及其病毒的生态学
  3. 自己封装js组件 - 中级
  4. Win64 驱动内核编程-18.SSDT
  5. redis哨兵集群数据迁移_redis集群数据迁移—redis-migrate-tool神器
  6. Linux驱动修炼之道-内存映射
  7. 单片机开发与Linux开发有何不同?
  8. iframe跨域通信的通用解决方案-第二弹!(终极解决方案)
  9. python魔法函数(二)之__getitem__、__len__、__iter__
  10. 面对性骚扰,Siri Alexa等AI助手如何应对
  11. win7安装mysql后“应用程序无法启动因为应用程序的并行配置不正
  12. js通过请求接口下载文件
  13. C++——EOF是个什么东西?
  14. php打implode 函数,[PHP源码阅读]explode和implode函数,explodeimplode_PHP教程
  15. 华硕笔记本很久没用开机后无法进入系统自动跳转bios界面的解决方法
  16. xmind 8破解方法
  17. 计算机桌面颜色比较暗,电脑显示器颜色偏暗怎么回事
  18. 解析海康摄像机推送的PS流
  19. 艰涩难懂,不存在的,消息队列其实很简单
  20. Yarn框架和工作流程简介

热门文章

  1. 苦战中同门服务器维护怎么算,忍无可忍,可以不忍
  2. Android ContentProvider和ContentResolver实例
  3. 苹果6plus网络显示无服务器,苹果iPhone6s/6s Plus现身网络,iPhone6c去向存疑
  4. Elasticsearch+Logstash+Kibana实战部署[ELK]
  5. 微信扫一扫错误提示realauthurl:xxx errmsg config:invalid signature
  6. 200 : parsererror错误
  7. 刘备、关羽、张飞现代创业
  8. window批处理命令启动nginx
  9. iphone11与android换机,苹果手机数据转移到新手机:iPhone 11用户换机必看——备忘录篇...
  10. FindWindowEx 遍历所有窗口