单Master
只有一个Broker(其本质上不能称为集群),这种方式也只能在测试环境使用,生产环境最好不要使用!
多Master
Broker集群仅由多个MasterBroker构成,不存在Salve,同一个Topic的各个Queue会平均分布各个Master节点上
优点:
配置简单,单个Master宕机或则重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢失,(异步刷盘丢失少量消息,同步刷盘一条不丢失),性能最高。
缺点
单机机器宕机期间,这几台机器上违背消费的消息,在机器恢复之前不可订阅(不可消费),消息实时性会受影响。
注意
优点是在Master配置了RAID磁盘阵列的前提下,如果没配置,一旦出现某个Master宕机,则会发生大量消息丢失
多Master多Salve模式-异步复制
基本介绍
Broker集群由多个Master构成,每个Master又配置了多个Salve(在配置RAID磁盘阵列的情况下,一个Master一般配置多个Salve即可),Master与Salve的关系是主备关系,即负责处理消息的读写请求,而Salve负责消息备份与Master宕机后角色切换
异步复制就是复制策略中的异步复制策略,即消息写入到Master成功后Master立刻向Producer返回ACK,无需等待Salve同步数据成功!
特点
该模式的最大特点之一是,当Master宕机后Salve能够自动切换为Master,不过由于Salve从Master同步具有短暂延迟,毫秒级,所以当Master宕机后,这种异步复制方式可能会存在少量消息丢失问题
Salve从Master同步的延迟越短暂,其丢失的消息越少
对于Master的RAID磁盘阵列,若使用的也是异步复制策略,同样也存在延迟问题,同样也可能存在会丢失消息,但RAID阵列的秘诀是微妙级别的(因为由于是磁盘支持的),所以其丢失的数据会更少。
多Master多Salve模式-同步双写
该模式是多MasterduoSlave模式的同步复制实现。所谓同步双写,是指消息写入Master成功后,Master会等待Slave同步数据成功后才向Producer返回成功ACK,即Master与Salve写入成功后才会返回ACK,即是双写。
该模式与异步复制数据模式相比,有点事消息的安全性更高,不存在消息丢失的情况,但单个消息的RT略高,从而导致性能要略低,(大约10%)
该模式下有一个大问题,对于目前版本Master宕机后,Slave不会自动切换为Master
最佳实践
一般会为Master配置RAID10磁盘阵列,然后再为期配置一个Slave,即利用RAID10磁盘阵列的高效、安全性,又解决了可能会影响订阅的问题。
1)RAID磁盘阵列的效率要高于Master-Slave集群,因为RAID是硬件支持的,也正是因为如此,所以RAID阵列的搭建成本较高
2)多Master+RAID阵列,与多Master多Slave集群的区别是什么?
多Master+RAID阵列,其仅仅可以保证数据不丢失,即不影响消息写入,但其可能会影响到消息的订阅,但其执行效率要远高于多Master多Slave集群
多Master多Slave集群,其不仅可以保证消息不丢失,也不会影响消息写入,其运行效率要低于多Master+RAID阵列