1、刷盘
刷盘策略: 消息发送到broker的内存后,消息持久化到磁盘的过程叫刷盘,分为同步和异步刷盘
- 同步刷盘:消息持久化到broker的磁盘后才算是消息写入成功。
在返回应用写成功状态前,消息已经被写入磁盘。具体流程是,消息写入内存的PAGECACHE后,立刻通知刷盘线程刷盘,然后等待刷盘完成,刷盘线程执行完成后唤醒等待的线程,给应用返回消息写成功的状态。
- 异步刷盘:消息写入到broker的内存后就表示消息写入成功,无需等待消息持久化到磁盘。
异步刷盘方式:在返回写成功状态时,消息可能只是被写入了内存的PAGECACHE,写操作的返回快,吞吐量大;当内存里的消息量积累到一定程度时,统一触发写磁盘操作,快速写入 。
配置方式:通过Broker配置文件里的flushDiskType
参数设置,SYNC_FLUSH, ASYNC_FLUSH中的一个
2、 数据复制
数据复制: broker的master节点的数据同步到slave节点的过程是数据复制
- 同步双写:消息写入master之后,master等待slave同步数据成功之后才向生产者返回ACK。
- 异步复制:消息写入master之后,maste立即向生产者返回ACK,无需等待slave同步数据。
配置方式:通过Broker配置文件里的brokerRole
参数进行设置,ASYNC_MASTER、SYNC_MASTER、SLAVE三个值中的一个。
注意:同步双写模式在master宕机后,slave不会自动切换到master。(高版本之后会自动切换?)
最佳实践:一般为master配置为RAID10磁盘阵列,然后在为其配置一个slave。
3、集群模式
3.1 多master多slave-异步复制
3.2 多master多slave-同步双写
同步双写模式在master宕机后,slave不会自动切换到master。(高版本之后会自动切换?