主流MQ对比

ActiveMQ、RabbitMQ、Kafka对比

ActiveMQ RabbitMQ Kafka
所属社区/公司 Apache Mozilla Public License Apache/LinkedIn
开发语言 Java Erlang Scala、Java
支持的协议 OpenWire、STOMP、
REST、XMPP、AMQP AMQP 仿AMQP
事务 支持 不支持 0.11 开始支持
集群 支持(不擅长) 支持(不擅长) 支持
负载均衡 支持 支持 支持
动态扩容 不支持 不支持 支持(zk)

rabbit、kafka、rocket对比

rabbit kafka rocket
定位 传统消息中间件,保证消息的可靠性 日志消息 非日志的可靠性传输
可用性 cluster普通模式,镜像队列模式 异步刷盘,可能出现数据丢失 实现了异步/同步刷盘
单机吞吐量 1w 10w 10w
积压消息能力 根据内存和磁盘阈值来决定 非常好,受磁盘限制 非常好,受磁盘限制
顺序消费 支持 支持 支持
定时消息 支持 不支持 支持
事务消息 不支持 不支持 支持
消息重试 支持 不支持 支持
死信队列 支持 不支持 支持

ActiveMQ、RabbitMQ、RocketMQ、Kafka对比

特性MQ ActiveMQ RabbitMQ RocketMQ Kafka
生产者消费者模式 支持 支持 支持 支持
发布订阅模式 支持 支持 支持 支持
请求回应模式 支持 支持 不支持 不支持
Api完备性
多语言支持 支持 支持 java 支持
单机吞吐量 万级 万级 万级 十万级
消息延迟 微秒级 毫秒级 毫秒级
可用性 高(主从) 高(主从) 非常高(分布式) 非常高(分布式)
消息丢失 较低 理论上不会丢失 理论上不会丢失
文档的完备性 较高
提供快速入门
社区活跃度
商业支持 商业云 商业云

总结

ActiveMQ 历史悠久的开源项目,已经在很多产品中得到应用,实现了JMS1.1规范,可以和spring-jms 轻松融合,实现了多种协议,不够轻巧(源代码比RocketMQ多),支持持久化到数据库,对队列数较多的情况支持不好。

RabbitMQ 它比Kafka成熟,支持AMQP事务处理,在可靠性上,RabbitMQ超过Kafka,在性能方面超过ActiveMQ。

RocketMQ 是阿里开源的消息中间件,目前在Apache孵化,使用纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,但并不是简单的复制,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景,支撑了阿里多次双十一活动。 因为是阿里内部从实践到产品的产物,因此里面很多接口、API并不是很普遍适用。其可靠性毋庸置疑,而且与Kafka一脉相承(甚至更优),性能强劲,支持海量堆积。

Kafka设计的初衷就是处理日志的,不支持AMQP事务处理,可以看做是一个日志系统,针对性很强,所以它并没有具备一个成熟MQ应该具备的特性。Kafka的性能(吞吐量、tps)比RabbitMQ要强,如果用来做大数据量的快速处理是比RabbitMQ有优势的。

posted @ 2022-08-07 18:05  snail灬  阅读(177)  评论(0编辑  收藏  举报