rocketMQ消息复制的实现过程

一、基本概念

在 RocketMQ 中,复制的基本单位是 Broker,也就是服务端的进程。复制采用的也是主从方式,通常情况下配置成一主一从,也可以支持一主多从。

二、传统复制模式

2.1 异步复制

消息先发送到主节点上,就返回“写入成功”,然后消息再异步复制到从节点上。

2.2 同步双写复制

消息同步双写到主从节点上,主从都写成功,才返回“写入成功”。

2.3 区别

这两种方式本质上的区别是,写入多少个副本再返回“写入成功”的问题,异步复制需要的副本数是 1,同步双写需要的副本数是2

2.4 rocketMQ为什么不会丢消息?

2.4.1 牺牲可用性,换区较好性能和数据一致性

  • 主从复制方式
    在 RocketMQ 中,Broker 的主从关系是通过配置固定的,不支持动态切换。如果主节点宕机,生产者就不能再生产消息了,消费者可以自动切换到从节点继续进行消费。这时候,即使有一些消息没有来得及复制到从节点上,这些消息依然躺在主节点的磁盘上,除非是主节点的磁盘坏了,否则等主节点重新恢复服务的时候,这些消息依然可以继续复制到从节点上,也可以继续消费,不会丢消息,消息的顺序也是没有问题的。

2.5 rocketMQ如何保证可用性

2.5.1 一对儿主从节点可用性不行,多来几对儿主从节点不就解决了?

RocketMQ 支持把一个主题分布到多对主从节点上去,每对主从节点中承担主题中的一部分队列,如果某个主节点宕机了,会自动切换到其他主节点上继续发消息,这样既解决了可用性的问题,还可以通过水平扩容来提升 Topic 总体的性能。

2.5.2 高可用与严格顺序不能并存

在需要保证消息严格顺序的场景下,由于在主题层面无法保证严格顺序,所以必须指
定队列来发送消息,对于任何一个队列,它一定是落在一组特定的主从节点上,如果这个主
节点宕机,其他的主节点是无法替代这个主节点的,否则就无法保证严格顺序。在这种复制
模式下,严格顺序和高可用只能选择一个。

三、基于 Deldger的新复制模式

3.0 DLedge基本概念

RocketMQ-on-DLedger Group 是指一组相同名称的 Broker,至少需要 3 个节点,通过 Raft 自动选举出一个 Leader,其余节点 作为 Follower,并在 Leader 和 Follower 之间复制数据以保证高可用。
RocketMQ-on-DLedger Group 能自动容灾切换,并保证数据一致。
RocketMQ-on-DLedger Group 是可以水平扩展的,也即可以部署任意多个 RocketMQ-on-DLedger Group 同时对外提供服务。

3.1 一主二从三副本的复制过程

  • Dledger 在写入消息的时候,要求至少消息复制到半数以上的节点之后,才给客户端返回
    写入成功,并且它是支持通过选举来动态切换主节点的。
  • 同样拿 3 个节点举例说明一下。当主节点宕机的时候,2 个从节点会通过投票选出一个新
    的主节点来继续提供服务,相比主从的复制模式,解决了可用性的问题。由于消息要至少复
    制到 2 个节点上才会返回写入成功,即使主节点宕机了,也至少有一个节点上的消息是和
    主节点一样的。
  • Dledger 在选举时,总会把数据和主节点一样的从节点选为新的主节点,
    这样就保证了数据的一致性,既不会丢消息,还可以保证严格顺序。

3.2 Dledger的不足

  • 选举过程中不能提供服务。
    -最少需要 3 个节点才能保证数据一致性,3 节点时,只能保证 1 个节点宕机时可
    用,如果 2 个节点同时宕机,即使还有 1 个节点存活也无法提供服务,资源的利用率比较
    低。另外,由于至少要复制到半数以上的节点才返回写入成功,性能上也不如主从异步复制
    的方式快。

Dledger的实际操作
Dledger官方文档
Dledger快速搭建官方文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容