RabbitMQ/RocketMQ/Kafka 高可用架构的对比

本文对比了RabbitMQ、RocketMQ和Kafka的高可用架构。RabbitMQ提供普通模式和镜像模式,镜像模式下所有节点包含完整数据副本。RocketMQ采用主从模式,依赖Dledger进行选举和同步。Kafka通过Zookeeper进行Controller和分区选举,使用ISR保持数据一致性。
摘要由CSDN通过智能技术生成

RabbitMQ

1.普通模式

2.镜像模式 

RabbitMQ 的高可用有两种模式,一种是普通模式,另一种是镜像模式。

普通模式:每个节点同步元数据,即每个节点都拥有一份完整的元数据,而队列数据只存在某个节点中。

镜像模式:基于普通模式下,新增镜像节点。每个镜像节点拥有和主节点相同的数据,包括队列数据。(镜像模式的故障转移需要依赖第三方插件 比如keepalived),并由主节点提供外部服务。

GM模块:实现的一种可靠的组播通讯协议,该协议能够保证组播消息的原子性,即保证组中活着的节点要么都收到消息要么都收不到。(参考:http://www.voidcn.com/article/p-khkfmklu-bru.html)

元数据包括:

  (1)队列元数据,队列名称和它们的属性(是否可持续化,是否自动删除)

  (2)交换器元数据(交换器名称,类型,属性)

  (3)绑定元数据,一张简单的表格展示了如何将消息路由到队列

  (4)Vhost元数据,为vhost内的队列,交换器和绑定提供命名空间和安全属性

RocketMQ

首先每个Broker都会向ServerName Cluster中注册,每个ServerName 拥有相同的元数据。同时Broker会与ServerName 保持心跳,以证明自己”活着”。

其次是master之间没有通信,如果master宕机,且无从节点。那么该master的数据将无法被消费,直至master恢复。如果该master无法恢复,会导致数据丢失。

RocketMQ主要实现主从模式,由主节点提供外部服务,并且基于Dleger协议(基于Raft)实现Leader选举和日志同步。

Kafka

每个Broker都会向Zookeeper 注册(/brokers/ids),在Broker集群中,存在存在一个主Controller(Broker),负责管理所有分区及副本状态。并且当某个分区的ISR变化时,负责通知所有Broker更新元数据。同时负责每个分区的Leader选举。

主Controller选举是所有节点向Zookeeper 注册 /Controller 节点,先到先到,其他节点监控这个节点的变化。

主分区选举是按照AR集合副本的顺序查找第一个存活的副本,并且在ISR集合中。

数据一致协议ISR,全称是“In-Sync Replicas”,也就是保持同步的副本,他的含义就是,跟Leader始终保持同步的Follower有哪些。Kafka自动维护和监控哪些Follower及时的跟上了Leader的数据同步。

总结

1.RabbitMQ提供普通模式与镜像模式,不同模式下每个节点都拥有一份完整的元数据,而队列数据只存在某个节点中。镜像模式基于不同模式,组成镜像的节点拥有完整的数据副本。

2.RocketMQ 向ServerName Cluster注册,以实现对外服务及负载均衡等功能。并通过Dlegder实现master选举与日志同步。

3.Kafka 通过Zookeeper实现主Controller选举及主分区选举。并通过ISR保持实现数据一致。

参考

1.狸猫技术窝 RocketMQ系列

2.《深入理解Kafka:核心设计与实践原理》

3.《RabbitMQ实战》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值