主流消息队列MQ对比
本文将从多个维度综合对比Kafka、RabbitMQ、RocketMQ、ActiveMQ这4款当前最主流的MQ消息中间件产品,希望能为您的下一次产品的架构设计和MQ消息中间件选型提供参考依据。特点RabbitMQActiveMQKafkaRocketMQ资料文档资料数量多资料数量多资料数量中等资料数量少,建议去官网上看开发语言ErlangJavaScalaJava支持的协议AMQPOpenWire
·
本文将从多个维度综合对比Kafka、RabbitMQ、RocketMQ、ActiveMQ这4款当前最主流的MQ消息中间件产品,希望能为您的下一次产品的架构设计和MQ消息中间件选型提供参考依据。
特点 | RabbitMQ | ActiveMQ | Kafka | RocketMQ |
---|---|---|---|---|
资料文档 | 资料数量多 | 资料数量多 | 资料数量中等 | 资料数量少,建议去官网上看 |
开发语言 | Erlang | Java | Scala | Java |
支持的协议 | AMQP | OpenWire、STOMP、REST、XMPP、AMQP | 自己定义的一套…(基于TCP) | 自己定义的一套… |
消息存储 | 内存、磁盘。支持少量堆积 | 内存、磁盘、数据库。支持少量堆积。 | 内存、磁盘、数据库。支持大量堆积 | 磁盘。支持大量堆积。 |
消息事务 | 支持。客户端将信道设置为事务模式,只有当消息被RabbitMQ接收,事务才能提交成功,否则在捕获异常后进行回滚。使用事务会使得性能有所下降 | 支持 | 支持 | 支持 |
负载均衡 | 负载均衡的支持不好 | 支持负载均衡。基于zookeeper实现负载均衡。 | 支持 | 支持 |
集群方式 | 支持简单集群,'复制'模式,对高级集群模式支持不好。 | 支持简单集群模式,比如'主-备',对高级集群模式支持不好。 | 天然的‘Leader-Slave’无状态集群,每台服务器既是Master也是Slave。 | 常用 多对'Master-Slave' 模式,开源版本需手动切换Slave变成Master。 |
管理界面 | 好 | 一般 | 一般 | 有管理后台, 但不是项目里自带, 需要自己启动一个单独的管理后台实例 |
可用性 | 高(主从) | 高(主从) | 非常高(分布式) | 非常高(分布式) |
消息重复 | 支持at least once、at most once | 支持at least once | 支持at least once、at most once | 支持at least once |
吞吐量(TPS) | 比较大 | 比较大 | 极大。Kafka按批次发送消息和消费消息。发送端将多个小消息合并,批量发向Broker,消费端每次取出一个批次的消息批量处理。 | 大。RocketMQ接收端可以批量消费消息,可以配置每次消费的消息数,但是发送端不是批量发送。 |
顺序消息 | 不支持 | 不支持 | 支持 | 支持 |
消息回溯 | 不支持 | 不支持 | 支持指定分区offset位置的回溯 | 支持指定分区offset位置的回溯 |
消息重试 | 不支持,但是可以利用消息确认机制实现。 | 不支持 | 不支持,但是可以利用消息确认机制实现 | 支持 |
并发度 | 并发度极高。本身是用Erlang语言写的,并发性能高。 | 并发度高 | 并发度高 | 并发度高。 |
综上对比:从各个维度对目前主流的MQ进行,以及目前的使用情况来看,针对日志的较大的场景,建议使用Kafka,就并发和消息的堆积能力来说,这方面kafka是最优秀的,ActivitMQ,和rabbitMQ作为老牌MQ,由于入场时间较早,已经占领了较大的市场,市场占有率较高,但由于实现的语言比较小众,扩展方面存在一定的短板;RocketMQ作为国产的MQ,且开源时间较晚,高并发情况下有很不错的性能表现,特别是在多个topic的情况下,性能依旧非常稳定,且支持已上绝大多数的特性,特别是用java开发,所以有比较好的扩展性,是一个不错的选择,后续的关于MQ的文章也是基于RocketMQ来写。
更多推荐
已为社区贡献2条内容
所有评论(0)