一、数据复制与刷盘策略![请添加图片描述](https://i-blog.csdnimg.cn/blog_migrate/8cd5594236d9a5952a18229df2923bd3.png)
- 复制策略:Broker的Master与Slave间的数据同步方式,分为同步复制与异步复制。
同步复制:消息写入Master后,等待Slave同步数据成功后才返回ACK。
异步复制:消息写入Master后,master立即向producer返回成功ACK,无需等待slave同步数据成功。降低系统写入延迟,RT变小,提高吞吐量。 - 刷盘策略:消息发送到broker内存后消息持久化到磁盘的方式,分为同步刷盘与异步刷盘
同步刷盘:消息持久化到broker到磁盘后才算消息写入成功。
异步刷盘:消息写入broker到内存后即表示消息写入成功,无需等待消息持久化到磁盘。降低系统写入延迟, RT变小,一般写入broker的PageCache中,会立即写入,不会立即落盘,当PageCache到达一定量时会自动落盘。
二、集群模式
- 单Master:只有一个broker,只能在测试环境使用,生产环境不能使用,会存在单点问题。
- 多Master:仅有多个Master没有Slave。同一个Topic的Queue会平均分布在不同的Master节点上。
优点:配置简单,单个Master宕机或重启对应用无影响。在磁盘配置为RAID10(磁盘阵列)时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢失(异步刷盘会丢失少量消息)
缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可以订阅(不可消费),消息实时性会受影响。 - 多Master多Slave模式-异步复制
Broker集群由多个master构成,每个master又配置多个slave(在配置了RAID磁盘阵列的情况下,一个master配置一个slave即可)。master与slave的关系是主备关系,即master负责处理消息的读写请求,slave仅负责消息的备份与master宕机后的角色切换。
异步复制即复制策略中的异步复制策略。
该模式最大特点,master宕机后,slave自动切换为master,由于短暂延迟,会出现少量消息丢失问题。 - 多Master多Slave模式-同步双写
master收到消息后等待slave同步数据成功后才向producer返回成功ACK,即master与slave都要写入成功后才会返回成功ACK。
优点:安全性高,不会丢失数据
缺点:性能低,目前版本,master宕机后,slave无法自动切换成master。 - 生产实践:一般会为Master配置RAID10磁盘阵列,然后再配置一个Slave。即利用了RAID10磁盘阵列的高效性、安全性,又解决了可能会影响订阅的问题。
1)磁盘阵列效率高于Master- Slave,硬件支持,因此搭建成本也高。
2)多Master+RAID阵列,与多Master多Slave区别在于磁盘阵列保证数据不丢失,不影响消息写入,但可能会影响消息的订阅。