RocketMQ的消息会在消息的发送者发送到队列之后存储到本地磁盘上,这样的好处就是可以保证系统挂掉之后,消息不至于丢失,还可以恢复。同时另一个好处就是可以使得存储的消息超出内存的限制。刷盘有两种方式,分布式同步刷盘和异步刷盘。
同步刷盘在返回写成功状态时,消息已被写入磁盘,具体流程是,消息写入内存的PAGECCACHE后,立刻通知刷盘线程刷盘,然后等待刷盘完成,刷盘线程执行完成后唤醒等待的线程,返回消息写成功的状态。
异步刷盘在返回写成功状态时,消息可能只是被写入了内存的PAGECACHE,写操作的返回快,吞吐量大;当内存里的消息量积累到一定程度时,统一触发写磁盘动作,快速写入。
配置同步刷盘还是异步刷盘,都是通过Broker配置文件里的flushDiskType参数设置的,这个参数被配置成SYNC_FLUSH,ASYNC_FLUSH中的一个