一 RocketMq的数据刷盘策略和复制策略
1.1 数据刷盘
刷盘策略指的是
broker
中消息的
落盘
方式,即消息发送到
broker
内存后消息持久化到磁盘的方式。分为
同步刷盘与异步刷盘:
同步刷盘:当消息持久化到
broker
的磁盘后才算是消息写入成功。
异步刷盘:当消息写入到
broker
的内存后即表示消息写入成功,无需等待消息持久化到磁盘。
1.2 复制策略
复制策略是
Broker
的
Master
与
Slave
间的数据同步方式。
分为同步复制与异步复制:
同步复制:消息写入
master
后,
master
会等待
slave
同步数据成功后才向
producer
返回成功
ACK
异步复制:消息写入
master
后,
master
立即向
producer
返回成功
ACK
,无需等待
slave
同步数据成
功。
二 Broker的集群模式
2.1 集群模式
单
Master
只有一个
broker
(其本质上就不能称为集群)。这种方式也只能是在测试时使用,生产环境下不能使
用,因为存在单点问题。
多
Master
broker
集群仅由多个
master
构成,不存在
Slave
。同一
Topic
的各个
Queue
会平均分布在各个
master
节点
上。
优点:配置简单,单个
Master
宕机或重启维护对应用无影响
,在磁盘配置为RAID10时,即使机器
宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步
刷盘一条不丢),性能最高;
缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅(不可消费),
消息实时性会受到影响。
多
Master
多
Slave
模式
-
异步复制
broker
集群由多个
master
构成,每个
master
又配置了多个
slave
(在配置了
RAID
磁盘阵列的情况下,一 个master
一般配置一个
slave
即可)。
master与slave的关系是主备关系,即master负责处理消息的读写 请求,而slave仅负责消息的备份与master宕机后的角色切换。
异步复制即前面所讲的
复制策略
中的
异步复制策略
,即消息写入
master
成功后,
master立即向
producer返回成功ACK,无需等待slave同步数据成功。
该模式的最大特点之一是,当
master
宕机后
slave
能够
自动切换
为
master
。不过由于
slave
从
master
的同 步具有短暂的延迟(毫秒级),所以当master
宕机后,这种异步复制方式可能会存在少量消息的丢失问题。
多
Master
多
Slave
模式
-
同步双写
该模式是
多
Master
多
Slave
模式
的
同步复制
实现。所谓
同步双写
,指的是消息写入
master
成功后,
master
会等待
slave
同步数据成功后才向
producer
返回成功
ACK
,即
master
与
slave
都要写入成功后才会 返回成功ACK
,也即
双写
。
该模式存在一个大的问题:对于目前的版本,
Master宕机后,Slave不会自动切换到Master。
三 RAID矩阵
3.1 RAID矩阵
廉价冗余磁盘阵列
( Redundant Array of Inexpensive Disks ),
RAID
主要利用
镜像、数据条带和数据校验
三种技术来获取高性能、可靠性、容错能力和扩展
性,根据对这三种技术的使用策略和组合架构,可以把
RAID
分为不同的等级,以满足不同数据应用的
需求。
RAID10
是一个
RAID1
与
RAID0
的组合体,所以它继承了
RAID0
的快速和
RAID1
的安全。
简单来说就是,先做
条带
,再做
镜像
。发即将进来的数据先分散到不同的磁盘,再将磁盘中的数据做镜像。