Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别?如何保证高可用的?

本文对比了Kafka、ActiveMQ、RabbitMQ和RocketMQ在吞吐量、延迟、社区活跃度、消息持久化、技术实现、高并发以及高可用性等方面的差异,强调了RabbitMQ在成熟度和稳定性上的优势,同时讨论了Kafka的日志定位和高可用性机制。
摘要由CSDN通过智能技术生成
Kafka ActiveMQ RabbitMQ RocketMQ 都有什么区 别?
对于吞吐量来说 kafka RocketMQ 支撑高吞吐, ActiveMQ RabbitMQ 比他们低一个数量级。对于
延迟量来说 RabbitMQ 是最低的。
1. 从社区活跃度 按照目前网络上的资料, RabbitMQ activeM ZeroMQ 三者中,综合来看, RabbitMQ 是首
选。
2. 持久化消息比较
ActiveMq RabbitMq 都支持。持久化消息主要是指我们机器在不可抗力因素等情况下挂掉了,消
息不会丢失的机制。
3. 综合技术实现
可靠性、灵活的路由、集群、事务、高可用的队列、消息排序、问题追踪、可视化管理工具、插件
系统等等。
RabbitMq / Kafka 最好, ActiveMq 次之, ZeroMq 最差。当然 ZeroMq 也可以做到,不过自己必
须手动写代码实现,代码量不小。尤其是可靠性中的:持久性、投递确认、发布者证实和高可用
性。
4. 高并发
毋庸置疑, RabbitMQ 最高,原因是它的实现语言是天生具备高并发高可用的 erlang 语言。
5. 比较关注的比较, RabbitMQ Kafka
RabbitMq Kafka 成熟,在可用性上,稳定性上,可靠性上, RabbitMq 胜于 Kafka (理论
上)。
另外, Kafka 的定位主要在日志等方面, 因为 Kafka 设计的初衷就是处理日志的,可以看做是一个
日志(消息)系统一个重要组件,针对性很强,所以 如果业务方面还是建议选择 RabbitMq
还有就是, Kafka 的性能(吞吐量、 TPS )比 RabbitMq 要高出来很多。
如何保证高可用的?
RabbitMQ 是比较有代表性的,因为是 基于主从 (非分布式)做高可用性的,我们就以 RabbitMQ
为例子讲解第一种 MQ 的高可用性怎么实现。 RabbitMQ 有三种模式:单机模式、普通集群模式、
镜像集群模式。
单机模式,就是 Demo 级别的,一般就是你本地启动了玩玩儿的 ? ,没人生产用单机模式
普通集群模式,意思就是在多台机器上启动多个 RabbitMQ 实例,每个机器启动一个。你 创建的
queue ,只会放在一个 RabbitMQ 实例上 ,但是每个实例都同步 queue 的元数据(元数据可以认
为是 queue 的一些配置信息,通过元数据,可以找到 queue 所在实例)。你消费的时候,实际上
如果连接到了另外一个实例,那么那个实例会从 queue 所在实例上拉取数据过来。 这方案主要是提
高吞吐量的 ,就是说让集群中多个节点来服务某个 queue 的读写操作。 镜像集群模式:这种模式,才是所谓的 RabbitMQ 的高可用模式。跟普通集群模式不一样的是,在
镜像集群模式下,你创建的 queue ,无论元数据还是 queue 里的消息都会 存在于多个实例上 ,就
是说,每个 RabbitMQ 节点都有这个 queue 的一个完整镜像,包含 queue 的全部数据的意思。然
后每次你写消息到 queue 的时候,都会自动把消息同步到多个实例的 queue 上。 RabbitMQ 有很
好的管理控制台,就是在后台新增一个策略,这个策略是镜像集群模式的策略,指定的时候是可以
要求数据同步到所有节点的,也可以要求同步到指定数量的节点,再次创建 queue 的时候,应用这
个策略,就会自动将数据同步到其他的节点上去了。这样的话,好处在于,你任何一个机器宕机
了,没事儿,其它机器(节点)还包含了这个 queue 的完整数据,别的 consumer 都可以到其它
节点上去消费数据。坏处在于,第一,这个性能开销也太大了吧,消息需要同步到所有机器上,导
致网络带宽压力和消耗很重! RabbitMQ 一个 queue 的数据都是放在一个节点里的,镜像集群下,
也是每个节点都放这个 queue 的完整数据。
Kafka 一个最基本的架构认识:由多个 broker 组成,每个 broker 是一个节点;你创建一个
topic ,这个 topic 可以划分为多个 partition ,每个 partition 可以存在于不同的 broker 上,每个
partition 就放一部分数据。这就是天然的分布式消息队列,就是说一个 topic 的数据,是 分散放在
多个机器上的,每个机器就放一部分数据 Kafka 0.8 以后,提供了 HA 机制,就是 replica (复制
品) 副本机制。每个 partition 的数据都会同步到其它机器上,形成自己的多个 replica 副本。所有
replica 会选举一个 leader 出来,那么生产和消费都跟这个 leader 打交道,然后其他 replica 就是
follower 。写的时候, leader 会负责把数据同步到所有 follower 上去,读的时候就直接读 leader
上的数据即可。只能读写 leader ?很简单,要是你可以随意读写每个 follower ,那么就要 care
据一致性的问题,系统复杂度太高,很容易出问题。 Kafka 会均匀地将一个 partition 的所有
replica 分布在不同的机器上,这样才可以提高容错性。因为如果某个 broker 宕机了,没事儿,那
broker 上面的 partition 在其他机器上都有副本的,如果这上面有某个 partition leader ,那
么此时会从 follower 中重新选举一个新的 leader 出来,大家继续读写那个新的 leader 即可。这就
有所谓的高可用性了。写数据的时候,生产者就写 leader ,然后 leader 将数据落地写本地磁盘,
接着其他 follower 自己主动从 leader pull 数据。一旦所有 follower 同步好数据了,就会发送
ack leader leader 收到所有 follower ack 之后,就会返回写成功的消息给生产者。(当
然,这只是其中一种模式,还可以适当调整这个行为)消费的时候,只会从 leader 去读,但是只有
当一个消息已经被所有 follower 都同步成功返回 ack 的时候,这个消息才会被消费者读到。
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值