RocketMQ系列---RocketMQ,ActiveMQ,RabbitMQ,Kafka对比

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/zhuyanlin09/article/details/101748716

本文将从多个维度综合对比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来写。

猜你喜欢

转载自blog.csdn.net/zhuyanlin09/article/details/101748716