RocketMQ的消息刷盘和消息双写

详细介绍了RocketMQ的消息刷盘策略,以及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学习博客!

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值