ActiveMQ RabbitMQ KafKa对比

前言:

ActiveMQ和 RabbitMq 以及Kafka在之前的项目中都有陆续使用过,当然对于三者没有进行过具体的对比,以下摘抄了一些网上关于这三者的对比情况,我自己看过之后感觉还

是可以的,比较清晰的反馈了这三个的具体情况已经使用场景,具体的对比如下:

1)TPS比较:
Kafka最高,RabbitMq 次之, ActiveMq 最差。

2)吞吐量对比:
kafka具有高的吞吐量,内部采用消息的批量处理,zero-copy机制,数据的存储和获取是本地磁盘顺序批量操作,具有O(1)的复杂度,消息处理的效率很高。
rabbitMQ在吞吐量方面稍逊于kafka,他们的出发点不一样,rabbitMQ支持对消息的可靠的传递,支持事务,不支持批量的操作;基于存储的可靠性的要求存储可以采用内存或者硬盘。

3)在架构模型方面:
RabbitMQ遵循AMQP协议,RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费(长连接,queue有消息会推送到consumer端,consumer循环从输入流读取数据)。rabbitMQ以broker为中心;有消息的确认机制。

kafka遵从一般的MQ结构,producer,broker,consumer,以consumer为中心,消息的消费信息保存的客户端consumer上,consumer根据消费的点,从broker上批量pull数据;无消息确认机制。

4)在可用性方面,
rabbitMQ支持miror的queue,主queue失效,miror queue接管。
kafka的broker支持主备模式。

activeMq也支持主备模式。

5)在集群负载均衡方面,
kafka采用zookeeper对集群中的broker、consumer进行管理,可以注册topic到zookeeper上;通过zookeeper的协调机制,producer保存对应topic的broker信息,可以随机或者轮询发送到broker上;并且producer可以基于语义指定分片,消息发送到broker的某分片上。

rabbitMQ的负载均衡需要单独的loadbalancer进行支持。

综合对比:
ActiveMQ: 历史悠久的开源项目,已经在很多产品中得到应用,实现了JMS1.1规范,可以和spring-jms轻松融合,实现了多种协议,不够轻巧(源代码比RocketMQ多),支持持久化到数据库,对队列数较多的情况支持不好。
RabbitMq:
它比kafka成熟,支持AMQP事务处理,在可靠性上,RabbitMq超过kafka,在性能方面超过ActiveMQ。
Kafka:
Kafka设计的初衷就是处理日志的,不支持AMQP事务处理,可以看做是一个日志系统,针对性很强,所以它并没有具备一个成熟MQ应该具备的特性
Kafka的性能(吞吐量、tps)比RabbitMq要强,如果用来做大数据量的快速处理是比RabbitMq有优势的。

下面是网上引用的详细对比:
原文图片:http://blog.csdn.net/oMaverick1/article/details/51331004

PS:图片可能有点小,可以右键另存到桌面保存再查看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ActiveMQRabbitMQKafka都是消息队列(Message Queue)系统。 ActiveMQ是一个开源的、基于Java的消息队列系统,支持多种通信协议,如AMQP、STOMP、MQTT等,可以用于异步通信、解耦、负载均衡等场景。 RabbitMQ也是一个开源的、基于Erlang语言的消息队列系统,支持AMQP协议,具有高可用性、可靠性和可扩展性,适用于分布式系统、微服务架构等场景。 Kafka是一个分布式的、基于Scala语言的消息队列系统,主要用于大规模数据处理和分析,支持高吞吐量、低延迟、可靠性等特性,适用于流处理、日志收集、实时分析等场景。 ### 回答2: ActiveMQRabbitMQKafka 都是流行的消息队列系统,它们都可以用于实现消息传递、解耦合和异步通信等场景。但是,它们之间在设计理念、使用场景和架构模型等方面存在不同。 ActiveMQ 是一个基于 JMS(Java Message Service)标准的消息中间件,使用开源的 Apache ActiveMQ 作为消息服务提供商。它提供了多种传输协议和消息协议(如 AMQP、MQTT 和 STOMP 等),支持广泛的编程语言和平台。ActiveMQ 提供了完整的 JMS 消息模型,包括点对点和发布-订阅模式,并提供了事务和持久化等高级功能。ActiveMQ 是一个比较成熟和稳定的消息系统,适合于大规模企业级应用,但是在高并发场景下,可靠性和性能可能会受到影响。 RabbitMQ 是一个使用 Erlang 语言编写的 AMQP (Advanced Message Queuing Protocol) 消息中间件,其架构采用分布式节点的方式,能够实现高可用和高可靠性。RabbitMQ 支持多种消息协议,并提供了丰富的插件和 API,支持多种编程语言。RabbitMQ 支持点对点和发布-订阅模式,提供了事务和持久化等高级功能,支持复杂的路由策略和负载均衡。RabbitMQ 的设计哲学是“居于中间,支持多个端点”,即将中间件作为独立的透明服务器,将业务系统与消息的传输和处理相分离,从而实现解耦合和高度灵活性。 Kafka 是一个分布式的、高吞吐量的消息中间件,其特点是支持高并发和高可靠性,主要用于实时流数据的处理和分发。Kafka 的设计思想是“纯日志”,即将消息作为日志进行处理,其架构采用“发布-订阅”模式,支持多个消费者消费同一份消息。Kafka 支持水平扩展,可以通过增加分区和副本来提高性能和可用性,同时还提供了消息缓存和消息存储等高级功能。Kafka 适合于处理大规模数据流和业务处理,但是其功能相对较简单,对开发人员要求较高。 综上所述,ActiveMQRabbitMQKafka 都具有各自独特的优势和适用场景。选择一个消息队列系统时,需要根据具体的业务需求和性能要求进行考虑,在可靠性、性能、灵活性和易用性等方面进行综合评估和比较。同时,也需要注意消息协议的兼容性和编程语言的支持等因素。 ### 回答3: ActivemqRabbitmqKafka都是消息中间件,用于实现分布式系统中不同组件之间的消息传递。 Activemq是基于Java的开源消息中间件,它使用JMS(Java Messaging Service)API来实现消息传递,支持多种传输协议,例如TCP、SSL、NIO以及JMS等。Activemq具有高度可靠性和可伸缩性以及易于管理的特点,可以支持多种消息模型,包括点对点、发布/订阅和持久订阅。 与Activemq相比,Rabbitmq是一个更轻量级的开源消息代理,由Erlang编写,使用AMQP(Advanced Message Queuing Protocol)进行消息传递。它提供了多种消息路由机制,包括直接、主题和分发,可以灵活地处理不同类型的消息传递场景。此外,Rabbitmq还具有高度可靠性、可扩展性和易于管理的特点。 与ActivemqRabbitmq相比,Kafka则更适合大数据处理环境。Kafka是一个分布式的流式平台,可以快速处理海量数据,通过分布式的存储和处理机制,使得数据具有高可靠性和高性能,可以应对海量数据的实时处理。Kafka使用基于发布/订阅模式的消息传递机制,并支持多种消息路由机制,包括分区、复制和故障转移等。 总的来说,这三种消息中间件都具有不同的特点和适用场景,选择哪种消息中间件应该基于实际需求进行评估和选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值