MST

星途 面试题库

面试题:消息队列RocketMQ消息存储机制之高级难度题

RocketMQ的刷盘策略有哪几种?在高并发场景下,不同刷盘策略对消息存储性能和数据可靠性有什么影响?如何根据业务场景选择合适的刷盘策略?
40.2万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

RocketMQ的刷盘策略

  1. 同步刷盘:消息写入内存的PageCache后,立即通知刷盘线程将PageCache中的数据刷入磁盘,只有刷盘成功后才向生产者返回成功响应。
  2. 异步刷盘:消息写入内存的PageCache后,就立即向生产者返回成功响应,刷盘线程会定期将PageCache中的数据刷入磁盘。

高并发场景下不同刷盘策略对性能和可靠性的影响

  1. 同步刷盘
    • 性能:由于每次消息写入都要等待刷盘完成,在高并发场景下,频繁的磁盘I/O操作会成为性能瓶颈,导致整体性能较低。
    • 可靠性:数据可靠性极高,因为只有刷盘成功才返回成功响应,即使发生宕机等故障,数据也不会丢失。
  2. 异步刷盘
    • 性能:消息写入内存PageCache后就返回成功响应,无需等待刷盘,在高并发场景下能承受更高的吞吐量,性能较好。
    • 可靠性:存在一定的数据丢失风险。如果在刷盘线程将PageCache数据刷入磁盘之前发生故障,那么PageCache中未刷入磁盘的消息会丢失。

根据业务场景选择合适的刷盘策略

  1. 对数据可靠性要求极高的场景:如金融交易、订单处理等业务,即使性能有所牺牲,也要确保数据不丢失,应选择同步刷盘策略。
  2. 对性能要求较高且能容忍少量数据丢失的场景:如实时日志收集、监控数据上报等业务,可选择异步刷盘策略,以获得更好的吞吐量。