RocketMQ刷盘策略
By
admin on 2025-07-15 10:55:43
RocketMQ提供了两种刷盘策略同步刷盘、异步刷盘
同步刷盘:在消息到达MQ后,RocketMQ需要将数据持久化,同步刷盘是指数据到达内存之后,必须刷到commitlog日志之后才算成功,然后返回producer数据已经发送成功。
异步刷盘:,同步刷盘是指数据到达内存之后,返回producer说数据已经发送成功。,然后再写入commitlog日志。
复制方式 | 优点 | 缺点 | 适应场景 |
---|
同步刷盘 | 保证了消息不丢失 | 吞吐率相对于异步刷盘要低 | 消息可靠性要求较高的场景 |
异步刷盘 | 系统的吞吐量提高 | 系统断电等异常时会有部分丢失 | 对应吞吐量要求较高的场景 |
同步刷盘时flushLeastPages=0立刻刷盘
异步刷盘时flushLeastPages=4 ,默认是4,需要刷盘的数据达到PageCache的页数4倍时才会刷盘,或者距上一次刷盘时间>=200ms则设置flushLeastPages=0立刻刷盘
同步刷盘时无论消息的大小都立刻刷盘,线程阻塞等待刷盘结果
异步刷盘有两种方式但是其逻辑都是需要刷盘的数据OS_PAGE_SIZE的4倍即(1024 * 4)*4=16k或者距上一次刷盘时间>=200ms时才刷盘,提高数据的刷盘性能