MST

星途 面试题库

面试题:消息队列之RocketMQ消息存储机制 - 刷盘策略

RocketMQ有哪几种刷盘策略?它们各自的优缺点是什么?在实际应用场景中如何选择合适的刷盘策略?
18.2万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

刷盘策略

  1. 同步刷盘:消息写入到PageCache后,立即调用fsync将PageCache的数据刷入磁盘。
  2. 异步刷盘:消息写入到PageCache后,由专门的刷盘线程异步将PageCache的数据刷入磁盘。

优缺点

  1. 同步刷盘
    • 优点:数据可靠性高,只要消息发送成功就一定已经持久化到磁盘,不会因为宕机等原因丢失。
    • 缺点:性能相对较低,因为每次消息写入都需要等待磁盘I/O完成,磁盘I/O成为性能瓶颈。
  2. 异步刷盘
    • 优点:性能较高,消息写入只需要写入PageCache,不需要等待磁盘I/O,提升了消息发送的吞吐量。
    • 缺点:数据可靠性相对较低,如果在刷盘线程将PageCache数据刷入磁盘前发生宕机,可能会丢失部分未刷入磁盘的消息。

实际场景选择

  1. 对数据可靠性要求极高的场景:如金融交易场景,建议选择同步刷盘策略,确保消息不会丢失,虽然性能会有所牺牲,但数据完整性更为重要。
  2. 对性能要求较高,且能容忍一定程度数据丢失的场景:如一般的日志收集、监控数据上报等场景,可选择异步刷盘策略,以获取更高的消息发送吞吐量。