面试题答案
一键面试刷盘机制保障消息存储可靠性
- 同步刷盘
- 当生产者发送消息到Broker时,Broker在将消息写入内存的PageCache后,会立即将PageCache中的数据刷入磁盘文件(CommitLog)。只有刷盘成功,Broker才会给生产者返回成功响应。这确保了消息在发送成功后就已经持久化到磁盘,即使Broker进程意外崩溃,由于消息已在磁盘,不会丢失。例如,在一些对数据可靠性要求极高的金融场景,会采用同步刷盘,保证每一笔交易相关消息都不会丢失。
- 异步刷盘
- 消息写入PageCache后,Broker立即向生产者返回成功响应。然后,Broker会启动一个后台线程,按照一定的时间间隔(如500毫秒)或者PageCache达到一定的脏页比例(如70%)时,将PageCache中的数据刷入磁盘。虽然异步刷盘在性能上有优势,因为无需等待刷盘完成就返回响应,但它也通过定期或按条件刷盘来尽量保障消息的可靠性。在大多数对性能有一定要求,同时对消息丢失容忍度相对较低的互联网业务场景中,异步刷盘是一种较为平衡的选择。
RocketMQ通过同步刷盘和异步刷盘这两种机制,在不同场景下为消息存储的可靠性提供了保障。