Loading

RocketMQ学习:集群搭建理论

数据复制与刷盘策略

image

复制策略

复制策略是 Broker的 Master与Slave间的数据同步方式。分为同步复制与异步复制:

  • 同步复制:消息写入Master后, Master会等待Slave同步数据成功后才向 Producer回成内ACK

  • 异步复制:消息写入 Master后, Master立即向Producer返回成功ACK,无需等待Slave同步数据成功
    异步复制策略会降低系统的写入延迟,RT变小,提高了系统的吞吐量

刷盘策略

刷盘策略指的是broker中消息的落盘方式,即消息发送到 broker内存后消息持久化到磁盘的方式。分为同步刷盘与异步刷盘:

  • 同步刷盘:当消息持久化到broker的磁盘后才算是消息写入成功,

  • 异步刷盘:当消息写入到broker的内存后即表示消息写入成功,无需等待消息持久化到磁盘。

  1. 异步刷盘策略会降低系统的写入延迟,RT变小,提高了系统的吞吐量
  2. 消息写入到Broker的内存,一般是写入到了PageCache
  3. 对于异步刷盘策略,消息会写入到PageCache后立即返回成功ACK。但并不会立即做落盘操作,而是当PagCache到达一定量时会自动进行落盘。!

Broker集群模式

单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,也即双写。

该模式与异步复制模式相比,优点是消息的安全性更高,不存在消息丢失的情况。但单个消息的RT略高,从而导致性能要略低(大约低10%)

该模式存在一个大的问题:对于目前的版本, Master宕机后, Slave不能自动切换到Master.

posted @ 2021-12-07 16:06  Xianhao  阅读(142)  评论(0)    收藏  举报