开发者学堂课程【RocketMQ 知识精讲与项目实战(第三阶段):RocketMQ 刷盘机制】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/704/detail/12450
RocketMQ 刷盘机制
内容介绍:
一、刷盘机制
二、消息刷盘的配置
一、刷盘机制
RocketMQ 将消息存储到磁盘上面,断电后 rocketMQ 不至于消息丢失。同时消息可以超过内存的限制,内存拿小米来讲一般较小,QMQ 将消息存储到磁盘上面,具体要怎么存储?一般来说有两种刷盘机制同步跟异步,那么同步和异步具体是什么意思?对于同步来讲,消息发送到 MQ 之后, MQ 会将消息写到内存中,再去通知刷盘的线程,将 memory 中的消息刷到磁盘当中。这时的 MQ 并没有对磁盘做出响应,因为刷盘没有完成,它会唤醒之前堵塞的线程,让它对生产者做一个响应,这种方式就叫做同步刷盘。进过分析发现同步刷盘,生产者得到 MQ 响应是在写完磁盘之后。异步刷盘就是生产者发送消息到 MQ , MQ 将消息写到内存当中,没有完成刷盘直接对客户做出响应,此时它会开辟另外一个线程对磁盘当中写,该过程为异步刷盘。若想要使用这两种刷盘方式该如何做?
二、消息刷盘的配置
两种刷盘的机制都是通过配置完成的,具体操作即打开 broker 配置文件,寻找 flushdisktype ,这里面有两个选项,一个是 sync 同步刷盘,一个是 async 异步刷盘,这就是两种刷盘机制。将机制说完之后,来比较一下二者的特点?同步刷盘保证消息的同步性即生产者得到响应之后,消息一定会存入到磁盘当中。异步刷盘不一定,它给予响应和刷盘是同时进行的,能够提高消息的吞吐量。也就是说异步刷盘的效率要高于同步刷盘,不需要存储到磁盘再发送到 broker ,直接存入内存就可继续发送给 MQ 。在真实企业当中,到底该选择哪个?从安全性和性能方面进行取舍。