RocketMQ的消息刷盘和消息双写
详细介绍了RocketMQ的消息刷盘策略,以及RocketMQ的消息双写机制。
文章目录
- 1 RocketMQ的消息刷盘
- 2 RocketMQ的消息双写
1 RocketMQ的消息刷盘
同步刷盘:如上图所示,只有在消息真正持久化至磁盘后RocketMQ的Broker端才会真正返回给Producer端一个成功的ACK响应。同步刷盘对MQ消息可靠性来说是一种不错的保障,但是性能上会有较大影响,一般适用于金融业务应用该模式较多。
异步刷盘:能够充分利用OS的PageCache的优势,只要消息写入PageCache即可将成功的ACK返回给Producer端。消息刷盘采用后台异步线程提交的方式进行,降低了读写延迟,提高了MQ的性能和吞吐量。
一般异步刷盘只有在Broker意外宕机的时候会丢失部分数据,因为即使Broker服务崩溃,只要系统没有崩溃,最终系统内核也会自动将pageCache的数据刷盘,可以通过设置 Broker 配置文件的参数 FlushDiskType 来调整刷盘策略ASYNC_FLUSH 或者 SYNC_FLUSH。
2 RocketMQ的消息双写
RocketMQ的消息双写主要是指的Borker主从模式下,主节点返回ack消息给客户端的时候是否需要等待消息从主节点同步到从节点。
消息需要从主节点同步(复制)到从节点上,有同步和异步两种复制方式。另外,RocketMQ 是不支持自动主从切换,当主节点挂掉之后,生产者就不能再给这个主节点生产消息了,需要人工干预,但是消费者还可以自动切换到从节点进行消费。
同步复制:也叫 同步双写,只有消息同步双写到主从结点上时才返回写入成功。如果Master出故障,Slave上有全部的备份数据,容易恢复,且消费者仍可以从Slave消费,消息不丢失。
异步复制:也叫异步双写,消息写入主节点之后就直接返回写入成功,此时系统拥有较低的延迟和较高的吞吐量,但如果Master出了故障,有些数据因为没有被复制到Slave,而丢失少量消息。
需要注意,异步双写的“消息丢失”和异步刷盘的“消息丢失”是不一样。采用异步复制的方式,在主节点挂掉的时间只会产生主从节点短暂的消息不一致的情况,降低了可用性,而当主节点重启之后,从节点那部分未来得及复制的消息还会继续复制过去,消息最终会被消费。
同步复制和异步复制可以通过Broker配置文件里的brokerRole参数进行设置,可以被设置成ASYNC_MASTER、SYNC_MASTER、SLAVE三个值中的一个。
相关文章:
RocketMQ
如有需要交流,或者文章有误,请直接留言。另外希望点赞、收藏、关注,我将不间断更新各种Java学习博客!
RocketMQ的消息刷盘和消息双写相关推荐
- RocketMQ源码(十)—Broker 消息刷盘服务GroupCommitService、FlushRealTimeService、CommitRealTimeService源码深度解析
深入的介绍了broker的消息刷盘服务源码解析,以及高性能的刷盘机制. 学习RocketMQ的时候,我们知道RocketMQ的刷盘策略有两个,同步或者是异步: 1. 同步刷盘:如上图所示,只有消息真正 ...
- RocketMQ源码(12)—Broker 消息刷盘服务GroupCommitService、FlushRealTimeService、CommitRealTimeService源码深度解析【一万字】
基于RocketMQ release-4.9.3,深入的介绍了Broker 的消息刷盘源码解析,以及高性能的刷盘机制. 学习RocketMQ的时候,我们知道RocketMQ的刷盘策略有两个,同步或者异 ...
- RocketMQ消息刷盘
RocketMQ消息刷盘 流程图 1.源码分析 RocketMQ 存储与读写是基于 JDK NIO 的内存映射机制( MappedByteBuffer )的,消息存储时首先将消息追加到内存,再根据配 ...
- RocketMQ消息存储、刷盘、负载均衡
消息存储 消息存储是RocketMQ中最为复杂和最为重要的一部分. 消息存储总体架构 消息存储架构图: minOffset:当前队列的最小消息偏移量,如果消费时指定从最早消费,就是从该偏移量消费. m ...
- RocketMQ消息存储之刷盘机制(原理篇)
一.前言 RocketMQ的刷盘机制是一种确保消息可靠性的机制,简单来说就是Broker收到消息后,将消息存储到磁盘上.这样可以解决几个问题: 存储空间问题.内存空间有限,存入磁盘可以维护更多消息. ...
- MySQL数据和日志的刷盘机制以及双一配置
详细介绍了MySQL数据和日志的刷盘机制以及双一配置,双一配置可以保证Mysql日志数据不丢失. 文章目录 1 内存数据的刷盘机制 2 MySQL数据的刷盘 2.1 刷盘数据来源 2.2 脏页以及刷盘 ...
- java什么是消息刷盘_Rocket重试机制,消息模式,刷盘方式
一.Consumer 批量消费(推模式) 可以通过 consumer.setConsumeMessageBatchMaxSize(10);//每次拉取10条 这里需要分为2种情况 Consumer端先 ...
- java什么是消息刷盘_RocketMQ刷盘策略
我们都知道RocketMQ的消息是持久化到文件的,具体的消息的刷盘策略是什么,是发送一条消息就直接持久化到文件中吗?作为一款高性能的消息中间件这样做肯定不行,至少性能上不允许这样操作,那么具体策略是啥 ...
- 【RocketMQ】消息的刷盘机制
刷盘策略 CommitLog的asyncPutMessage方法中可以看到在写入消息之后,调用了submitFlushRequest方法执行刷盘策略: public class CommitLog { ...
最新文章
- OpenStack部署
- 使用es6中import和export报错
- 使用 Spring Boot CLI 运行第一个Spring boot程序
- wps启用编辑按钮在哪里_WPS 新功能上线,官宣首发!人人都会用的图片设计
- 大厂开发“大牛”,你距离他们有多远?
- 浅谈GRADS气象绘图软件的使用
- 如何使新浪播放器自动播放_七夕小子_新浪博客
- 3ds Max小白入门小案例|旋转楼梯
- 专业商标制作,免费logo在线设计
- 省市区级联SQL文件(MySQL)
- 动态规划题目——背包
- linux shell脚本 字符串、整数、小数判断
- dialogfragment 数据交互_交互的学习与应用指南 | 人人都是产品经理
- EventLog Analyzer应用程序日志管理
- Oracle数据库--从入门到装逼
- DataSource health check failed
- MSP430串口波特率寄存器的配置
- python中函数不包括参数函数二阶导数公式_请问参数方程确定的函数的二阶导数公式的详细推导过程?...
- 云计算虚拟化环境下的安全防护
- 省市级联;附有最新最全的省市区数据包