【消息队列】开源消息队列与云消息队列调研

12 篇文章 0 订阅
1 篇文章 0 订阅

目录

开源队列产品对比

云队列产品对比

调研总结

1.针对自建队列产品:

2.针对云队列产品:

3.综合考虑:


开源队列产品对比

队列名称ActiveMQRabbitMQRocketMQKafka
定位非日志的可靠消息传输非日志的可靠消息传输非日志的可靠消息传输系统间的数据量管道
队列模式
订阅模式
多语言支持JAVA优先语言无关JAVA优先JAVA优先
开发语言javaErlangjavaScala
支持协议JSM、OpenWire、STOMP、REST、XMPP、AMOPAMOP自定义的一套协议一套自行设计的基于TCP的二进制协议
特点功能齐全性能好(快),支持多语言各环节分布式扩展设计;支持上万个队列;多种消费模式成熟的日志领域
持久化内存、文件、数据库内存、文件磁盘文件磁盘文件
事务支持不支持支持不支持
可用性高,主从高,主从非常高,分布式、主从非常高,分布式、主从
部署方式单机/集群单机/集群单机/集群单机/集群
集群管理zookeeper自我支持name serverzookeeper
选主方式自动选举

自动选举

最早加入集群的broker

不支持自动选举

通过设定 brokername,brokerid实现,brokername相同,brokerid=0时为master,其他为slaver

自动选举
数据可靠性

producer支持同步/异步ack。

支持队列数据持久化,镜像模式支持主从同步

很好

支持roducer单条发送,broker端支持同步刷盘、异步刷盘、同步双写、异步复制

非常好

支持producer单条发送、同步刷盘、同步复制,但这种场景性能明显下降

负载均衡支持支持支持支持
写入性能 

内存性能约为RocketMQ的1/2

磁盘性能约为RocketMQ的1/3

很好

每条10个字节测试:单机单broker约7w/s,单机3broker约12w/s

非常好

每条10个字节测试:百万条/s

单机支持队列数默认配置为1000,基于内存基于内存单机最高支持5万个队列,load不会发生明显变化单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长
性能稳定性 消息堆积时,性能不稳定,明显下降队列较多,消息堆积时性能稳定

队列/分区多时性能不稳定,明显下降。

消息堆积时性能稳定

堆积能力 一般,生产者、消费者正常时,性能表现稳定;消费者不消费时,性能不稳定非常好,所有消息存储在一个commit log中非常好,消息存储在log中,每个分区一个log文件
文档的完备性
首次部署难度
评价

优点:

成熟的产品,适合小规模场景

各种协议支持比较好

老牌产品,对Java语言支持很好

 

缺点:

性能一般

不适用于大量队列的应用场景

优点:

当前最主流的消息中间件

支持多种客户端语言、支持amqp协议

基于erlang开发,性能好;使用RAM模式时,性能也比较好

管理界面较丰富,在互联网公司有大规模应用

生态丰富,使用者众多

 

缺点:

erlang语言难度大,集群不支持动态扩展

不支持事务、消息吞吐能力有限

消息堆积时,性能会明显下降

优点:

在高吞吐、低延时、高可用上有非常好的表现,消息堆积时,性能也很好

支持多种消费方式

顺序消费能力

支持broker消息过滤

支持事务

集群规模在50台左右,单日处理消息上百亿;经历过大数据量的考验,比较稳定可靠

 

缺点:

相比于kafka,使用者较少,生态不完善,消息堆积、吞吐率有所不如

不支持自动主从切换,master失效后,消费者需要一定时间才能感知

优点:

高吞吐、低延迟、高可用、集群热扩展、集群容错都有非常好的表现

producer端提供缓存、压缩功能,可节省性能,提高效率

提供顺序消费能力

提供多种客户端语言

生态完善,在大数据方面有大量配套的设施

 

缺点:

消费集群数量收到分区数目的限制

单机topic多时,性能会明显下降

不支持事务

云队列产品对比

队列名称RocketMQ(阿里云产品)RabbitMQ(阿里云产品)CMQ(腾讯云产品)
队列&订阅满足满足满足
功能特性

多种消息类型

(普通消息、事务消息、定时和延时消息、顺序消息)、

消息重试、监控报警、集群消费等等功能

(https://help.aliyun.com/document_detail/155952.html)

消息类型

(普通消息、延时消息)

资源报表、监控报警等等功能

比RocketMQ功能更少

(https://help.aliyun.com/document_detail/146743.html)

腾讯自研

消息路由功能、配合云函数触发消息传递等等

功能上其实就是实现了队列的基本功能,只是增加了队列的可用性和简化了用户的操作

SDK接入

区分社区和商业版SDK,

商业版支持语言种类更多(商业版支持go)

阿里云推荐使用开源RabbitMQ SDK,支持多语言支持语言种类少( Java、Python、PHP 及 C++ )
定价

分包年月和按量

根据topic数量收费,每个topic都大概需要几块/天

(https://help.aliyun.com/document_detail/51338.html)

只支持包年包月

按queue数量计费,50个队列起售  约1200元/月 

(https://help.aliyun.com/document_detail/146640.html)

目前是免费的,2021年下半年会有一次升级,很可能改成收费

(自卖自夸)

阿里云RabbitMQ对比开源RabbitMQ:https://help.aliyun.com/document_detail/188208.html

腾讯云CMQ对比开源RabbitMQ,RocketMQ:https://cloud.tencent.com/document/product/406/4586

调研总结

1.针对自建队列产品:

ActiveMQ老练易用,与java兼容程度高,但性能一般

RabbitMQ性能好,响应速度快,使用率高、但性能稳定性不强,并且语言难度大,出现问题难以维护

RocketMQ综合能力强,高级特性多,但它是标准的发布-订阅模型,不完全遵循JMS协议,默认不支持(点对点+订阅)模式,这里需要自行扩展,基于topic可实现

kafka大规模分布式消息队列,吞吐数据能力强,但受到队列数量限制

2.针对云队列产品:

直接使用云的队列产品,优势是上手容易,有清晰的控制台管理队列,按他们文档的说法,自身的可用性和功能性都远远高于开源队列产品。

阿里云主推RocketMQ,功能是最完善的。

腾讯云产品功能有限,但是对队列有足够保障。

但阿里云的队列产品的话价格会比较昂贵,腾讯云队列后续很大概率会收费。

3.综合考虑:

单从调研来看,从性价比的方面考虑更推荐使用开源队列。

看上去三种队列都能满足一般需求。

RocketMQ似乎是最有潜力的。

 

参考文档(可能不全)

  • https://blog.csdn.net/fxbin123/article/details/90261669
  • https://blog.csdn.net/lyly4413/article/details/80838716
  • https://tianjunwei.blog.csdn.net/article/details/84592864
  • https://blog.csdn.net/zhuyanlin09/article/details/101751549
  • https://blog.csdn.net/ffzhihua/article/details/103385399
  • https://www.jianshu.com/p/027accb2b7ae
  • https://blog.csdn.net/weixin_39738380/article/details/111611643

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值