RocketMQ的刷盘机制
RocketMQ需要将消息存储到磁盘上,这样才能保证断电后消息不会丢失。同时这样才可以让存储的消息量可以超出内存的限制。RocketMQ为了提高性能,会尽量保证磁盘的顺序写。消息在写入磁盘时,有两种写磁盘的方式,同步刷盘和异步刷盘
关于同步刷盘和异步刷盘
消息发给mq之后会存硬盘,存的时候也有区别,如果为了保证存储的效率,通常会先数据存到PAGECACHE缓存,mq将消息存到PAGECACHE缓存之后,就给broker一个响应结果, 然后另外有一个线程专门去做把PAGECACHE的数据写到磁盘里面,这个就是异步刷盘机制,
如果是同步刷盘的话,就是RocketMQ将消息写入内存的PAGECACHE后,立马就通知刷盘线程刷盘, 然后等待刷盘完成,刷盘线程执行完成后唤醒等待的线程,返回消息写 成功的状态。
同步刷盘:
在返回写成功状态时,消息已经被写入磁盘。具体流程是,消息写入内存的PAGECACHE后,立刻通知刷盘线程刷盘, 然后等待刷盘完成,刷盘线程执行完成后唤醒等待的线程,返回消息写成功
的状态。
异步刷盘:
在返回写成功状态时,消息可能只是被写入了内存的PAGECACHE,写操作的返回快,吞吐量大.当内存里的消息量积累到一定程度时,统一触发写磁盘动作,快速写入。
同步刷盘和异步刷盘区别
异步刷盘吞吐量更高,但是会有丢失消息的可能,因为你消息是会暂存到PAGECACHE这个内存,如果你有一些消息还没来得及写到硬盘中,此时这个broker服务宕机了,那你还没来得及写入到硬盘的消息就丢失了.
同步刷盘虽然吞吐量低,吞吐量比异步刷盘差很多,但是每过来一条数据都会立马写到磁盘上,这样就不会丢失消息.
刷盘机制配置
刷盘方式是通过Broker配置文件里的flushDiskType 参数设置的,这个参数被配置成SYNC_FLUSH (同步刷盘)、ASYNC_FLUSH (异步刷盘)中的 一个。
RocketMQ的刷盘机制相关推荐
- 顺藤摸瓜RocketMQ之刷盘机制debug解析
文章目录 Rocketmq 刷盘机制 三个文件 indexFile consumeQueue commitlog 异步刷盘 consumerqueue和indexfile文件是什么时候更新的 同步刷盘 ...
- RocketMQ消息存储之刷盘机制(原理篇)
一.前言 RocketMQ的刷盘机制是一种确保消息可靠性的机制,简单来说就是Broker收到消息后,将消息存储到磁盘上.这样可以解决几个问题: 存储空间问题.内存空间有限,存入磁盘可以维护更多消息. ...
- RocketMQ5.0.0消息存储<四>_刷盘机制
目录 一.刷盘概览 二.Broker刷盘机制 1. 同步刷盘 2. 异步刷盘 1):未开启堆外内存池 2):开启堆外内存池 三.参考资料 一.刷盘概览 RocketMQ存储与读写是基于JDK NIO的 ...
- RocketMQ刷盘机制
概览 RocketMQ的存储读写是基于JDK NIO的内存映射机制的,消息存储时首先将消息追加到内存中.在根据不同的刷盘策略在不同的时间进行刷盘.如果是同步刷盘,消息追加到内存后,将同步调用Mappe ...
- 深入源码聊聊RocketMQ刷盘机制
大家好,我是Leo. 今天聊一下RocketMQ的三种刷盘机制. 同步刷盘 异步刷盘(RocketMQ默认) 异步刷盘+缓冲区 出自微信公众号[欢少的成长之路] 本章概括 同步刷盘 整个同步刷盘策略由 ...
- RocketMQ消息刷盘
RocketMQ消息刷盘 流程图 1.源码分析 RocketMQ 存储与读写是基于 JDK NIO 的内存映射机制( MappedByteBuffer )的,消息存储时首先将消息追加到内存,再根据配 ...
- mysql刷盘机制详解
目录 刷盘机制总览 log buffer(innodb的,由存储引擎分配) binlog cache(由server分配) buffer pool 自适应刷脏页Adaptive Flushing 刷盘 ...
- MySQL数据和日志的刷盘机制以及双一配置
详细介绍了MySQL数据和日志的刷盘机制以及双一配置,双一配置可以保证Mysql日志数据不丢失. 文章目录 1 内存数据的刷盘机制 2 MySQL数据的刷盘 2.1 刷盘数据来源 2.2 脏页以及刷盘 ...
- 【RocketMQ】消息的刷盘机制
刷盘策略 CommitLog的asyncPutMessage方法中可以看到在写入消息之后,调用了submitFlushRequest方法执行刷盘策略: public class CommitLog { ...
最新文章
- 机器视觉图像采集卡的功能与应用
- 宏基因组学揭示海洋微生物及其病毒的生态学
- 自己封装js组件 - 中级
- Win64 驱动内核编程-18.SSDT
- redis哨兵集群数据迁移_redis集群数据迁移—redis-migrate-tool神器
- Linux驱动修炼之道-内存映射
- 单片机开发与Linux开发有何不同?
- iframe跨域通信的通用解决方案-第二弹!(终极解决方案)
- python魔法函数(二)之__getitem__、__len__、__iter__
- 面对性骚扰,Siri Alexa等AI助手如何应对
- win7安装mysql后“应用程序无法启动因为应用程序的并行配置不正
- js通过请求接口下载文件
- C++——EOF是个什么东西?
- php打implode 函数,[PHP源码阅读]explode和implode函数,explodeimplode_PHP教程
- 华硕笔记本很久没用开机后无法进入系统自动跳转bios界面的解决方法
- xmind 8破解方法
- 计算机桌面颜色比较暗,电脑显示器颜色偏暗怎么回事
- 解析海康摄像机推送的PS流
- 艰涩难懂,不存在的,消息队列其实很简单
- Yarn框架和工作流程简介
热门文章
- 苦战中同门服务器维护怎么算,忍无可忍,可以不忍
- Android ContentProvider和ContentResolver实例
- 苹果6plus网络显示无服务器,苹果iPhone6s/6s Plus现身网络,iPhone6c去向存疑
- Elasticsearch+Logstash+Kibana实战部署[ELK]
- 微信扫一扫错误提示realauthurl:xxx errmsg config:invalid signature
- 200 : parsererror错误
- 刘备、关羽、张飞现代创业
- window批处理命令启动nginx
- iphone11与android换机,苹果手机数据转移到新手机:iPhone 11用户换机必看——备忘录篇...
- FindWindowEx 遍历所有窗口