0
点赞
收藏
分享

微信扫一扫

消息刷盘怎么实现的

RocketMQ提供了两种刷盘策略:同步刷盘和异步刷盘

同步刷盘:在消息达到Broker的内存之后,必须刷到commitLog日志文件中才

成功,然后返回Producer数据已经发送成功。

异步刷盘:异步刷盘是指消息达到Broker内存后就返回Producer数据已经发送成功,会唤醒一个线程去将数据持久化到CommitLog日志文件中。

Broker 在消息的存取时直接操作的是内存(内存映射文件),这可以提供系统的吞吐量,但是无法避免机器掉电时数据丢失,所以需要持久化到磁盘中。

刷盘的最终实现都是使用NIO中的 MappedByteBuffer.force() 将映射区的数据写入到磁盘,如果是同步刷盘的话,在Broker把消息写到CommitLog映射区后,就会等待写入完成。

异步而言,只是唤醒对应的线程,不保证执行的时机,流程如图所示。

消息刷盘怎么实现的_日志文件

举报

相关推荐

0 条评论