文档章节

MQ产品比较-ActiveMQ-RocketMQ

javahongxi
 javahongxi
发布于 2017/09/06 11:05
字数 2183
阅读 1639
收藏 76
点赞 5
评论 11

几种MQ产品说明:


     ZeroMQ :  扩展性好,开发比较灵活,采用C语言实现,实际上他只是一个socket库的重新封装,如果我们做为消息队列使用,需要开发大量的代码

    RabbitMQ :结合erlang语言本身的并发优势,性能较好,但是不利于做二次开发和维护

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

    Redis 做为一个基于内存的K-V数据库,其提供了消息订阅的服务,可以当作MQ来使用,目前应用案例较少,且不方便扩展

 

     kafka 设计的初衷就是处理日志的,可以看做是一个日志系统,针对性很强,所以它并没有具备一个成熟MQ应该具备的特性

    RocketMQ: 阿里巴巴的MQ中间件,在其多个产品下使用,并能够撑住双十一的大流量,他并没有实现JMS规范,使用起来很简单。部署由一个 命名服务(nameserver)和一个代理(broker)组成,nameserver和broker以及producer都支持集群,队列的容量受机器硬盘的限制,队列满后可以支持持久化到硬盘(也可以自己适配代码,将其持久化到NOSQL数据库中),队列满后会影响吞吐量,可以采用主备来保证稳定性,支持回溯消费,可以在broker端进行消息过滤.

针对消息中间件的选择可以从以下方面进行考虑:(主要对比ActiveMQ和RocketMQ)
优先级:我们的项目对此需求不是特别明显,RocketMQ需要新建一个特殊队列来接收优先级高的队列,无法实现从0-65535这种细粒度的控制,ActiveMQ可以精细控制
顺序:我们的消息总线中的消息应该都是无状态的,所以对消息的处理顺序没有严格的要求,如果有特殊要求的话可以在业务层进行控制,activeMQ无法保证严格的顺序,RocketMQ可以保证严格的消费顺序
持久化:都支持
稳定性:RoketMQ在稳定性上可能更值得信赖,支持多种集群方案,毕竟已经撑过几个双十一
消息过滤:ActiveMQ仅支持在客户端消费的时候进行判断是否是自己需要的消息,RocketMQ可以在broker端进行过滤,对于我们的消息总线,这里可以节省大量的网络传输是否会有消息重发造成的重复消费:RocketMQ可以保证,ActiveMQ无法保证
回溯消费:即重新将某一个时刻之前的消息重新消费一遍,我们对于这种需求应该很少,RocketMQ支持,ActiveMQ不支持(RocketMQ的队列是持久化到硬盘的,定期进行清除
事务:都支持(注意你选用的rocketmq版本是否去掉了事务)
定时消费:RocketMQ支持
消息堆积:就是当缓存消息的内存满了之后的解决方案,一种是丢弃策略,这种不会影响吞吐量,还有一种就是将消息持久化到磁盘,这种会影响吞吐量,在评估影响程度上,RocketMQ的成绩稍微好一点
客户端不在线:RocketMQ可以在客户端上线后继续将未消费的消息推送到客户端

 

目前比较活跃的几种MQ中间件产品的对比如下:(仅统计开源的项目)
 

  ActiveMQ RabbitMQ RocketMq ZeroMQ
关注度  
成熟度   成熟 成熟 比较成熟 不成熟
所属社区/公司 Apache  Mozilla
Public
License
Alibaba      
社区活跃度  
文档  
特点   功能齐全,被大量开源项目使用 由于Erlang 语言的并发能力,性能很好    各个环节分布式扩展设计,主从 HA;支持上万个队列;多种消费模式;性能很好 低延时,高性能,最高 43万条消息每秒  
授权方式   开源 开源 开源 开源
开发语言   Java Erlang   Java   C
支持的协议   OpenWire、
STOMP、
REST、XMPP、
AMQP
AMQP   自己定义的一
套(社区提供
JMS--不成熟)
TCP、UDP
客户端支持语言   Java、C、
C++、
Python、
PHP、
Perl、.net 等  
Java、C、
C++、
Python、 PHP、Perl 等
Java  
C++(不成熟)  
 
python、 java、 php、.net 等
持久化   内存、文件、数据库 内存、文件 磁盘文件 在消息发送端保存
分布式事务   支持 不支持 支持 不支持
集群   支持 支持 支持 不支持
负载均衡 支持 支持 支持 不支持
管理界面   一般 无,社区有 web
console   实现
部署方式   独立、嵌入 独立 独立 独立
评价   优点:
   成熟的产品,已经在很多公司得到应用(非大规模场景)。有较多的文档。各种协议支持较好,有多重语言的成熟的客户端;
缺点:
根据其他用户反馈,会出莫名其妙的问题,切会丢失消息。 其重心放到activemq6.0 产品—apollo 上去了,目前社区不活跃,且对 5.x 维护较少;
Activemq 不适合用于上千个队列的应用场景
优点:   由于erlang语言的特性,mq 性能较好;管理界面较丰富,在互联网公司也有较大规模的应用;支持amqp系诶,有多中语言且支持 amqp 的客户端可用
 
缺点:
  erlang语言难度较
大。集群扩容依赖前端
优点:
   模型简单,接口易用(JMS   的接口很多场合并不太实用)。在阿里大规模应用。目前支付宝中的余额宝等新兴产
品均使用rocketmq。集群规模大概在50 台左右,单日处理消息上百亿;性能非常好,可以大量堆
积消息在broker   中;支持多种消费,包括集群消费、广播消费等。开发度较活跃,版本更新很快。
 缺点:
  没有在 mq 核心中去实现JMS 等接口,
 

 

阿里巴巴消息中间件

消息队列 MQ、Apache ActiveMQ、Apache Kafka、Apache RocketMQ、RabbitMQ 产品对比

消息队列秉持开放、共享的原则拥抱开源生态,无技术绑定。2016年阿里巴巴正式宣布将 MQ 内核引擎 RocketMQ 捐赠给 Apache 软件基金会;与此同时,全面融合 Kafka 生态,做到无缝迁移,打造更安全、更可靠、更易运维的 Kafka 企业级消息服务。

消息队列MQ:阿里内部产品名 MetaQ、Notify;开源社区产品名为 RocketMQ;产品多次在国内外获奖。

产品对比:

功能 MQ 消息队列 Apache RocketMQ
(开源)

Apache

ActiveMQ

(开源)

Apache Kafka
(开源)
RabbitMQ
(开源)
安全防护 支持 不支持 支持 不支持 不支持
主子账号支持 支持 不支持 不支持 不支持 不支持
可靠性 - 同步刷盘 
- 同步双写 
- 超3份数据副本 
- 99.99999999%
- 同步刷盘
- 异步刷盘
- 同步刷盘 
- 异步刷盘 
 
异步刷盘,丢数据概率高 同步刷盘
可用性 - 非常好,99.95%
- Always Writable
横向扩展能力 - 支持平滑扩展
- 支持百万级 QPS
支持   支持 - 集群扩容依赖前端
- LVS 负载均衡调度
Low Latency 支持 不支持   不支持 不支持
消费模型 Push / Pull Push / Pull Push Pull Push / Pull
定时消息 支持(可精确到秒级) 支持(只支持18个固定 Level) 不支持 不支持 不支持
事务消息 支持 不支持 支持 不支持 不支持
全链路消息轨迹 支持 不支持 不支持 不支持 不支持
消息堆积能力 百亿级别
不影响性能
百亿级别
影响性能
影响性能 影响性能 影响性能
消息堆积查询 支持 支持   不支持 不支持
消息回溯 支持 支持 不支持 不支持 不支持
消息重试 支持 支持 支持 不支持 支持
死信队列 支持 支持 支持 不支持 支持
性能(常规) 非常好
百万级 QPS
非常好
十万级 QPS
非常好
百万级 QPS
非常好
百万级 QPS
一般
万级 QPS
性能(万级 Topic 场景) 非常好
百万级 QPS
非常好
十万级 QPS
 
性能(海量消息堆积场景) 非常好
百万级 QPS
非常好
十万级 QPS
 

© 著作权归作者所有

共有 人打赏支持
javahongxi
粉丝 164
博文 259
码字总数 779422
作品 0
朝阳
程序员
加载中

评论(11)

开源中国首席罗纳尔多
开源中国首席罗纳尔多

引用来自“京东技术”的评论

引用来自“漆黑的烈焰使”的评论

mq可以存下我当前的response然后等消费完后用这个response返回告诉前端成功吗?

回复@漆黑的烈焰使 : 如果我没记错的话,JMS有这种选项

回复@京东技术 : 一般的mq消费都不能携带对象的吗?我想携带response对象给消费者
开源中国首席罗纳尔多
开源中国首席罗纳尔多
mq可以存下我当前的response然后等消费完后用这个response返回告诉前端成功吗?
javahongxi
javahongxi
实操代码见 https://github.com/javahongxi
nanyun
nanyun
https://github.com/kr/beanstalkd
nanyun
nanyun
https://github.com/kr/beanstalkd
javahongxi
javahongxi

引用来自“loyal”的评论

这个文章抄的老文章吧?
厉害
javahongxi
javahongxi

引用来自“nanyun”的评论

阿里的那个还是比较偏java系
嗯,我专注于java
javahongxi
javahongxi

引用来自“nanyun”的评论

请教一下,如果只需要一个简单的mq,beanstalkd怎么样,有没有了解啊。

回复@nanyun : 这个第一次听说,用于什么语言环境
nanyun
nanyun
阿里的那个还是比较偏java系
nanyun
nanyun
请教一下,如果只需要一个简单的mq,beanstalkd怎么样,有没有了解啊。
爬虫架构 | 消息队列应用场景及ActiveMQ、RabbitMQ、RocketMQ、Kafka对比

前言:在之前的业务中,使用了Kafka和RabbitMQ两种消息队列,这篇文章来做一个总结。 消息队列中间件是分布式系统中重要的组件,主要实现异步消息,应用解耦,流量削峰及消息通讯等功能。 下...

小怪聊职场
04/26
0
0
ActiveMQ RabbitMQ KafKa对比

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

xiaomin0322
05/11
0
0
Rocketmq支持用JmsTemplate发送消息吗

在Spring框架中使用JMS的JMS template同步发送消息,非常简单和强大,Activemq是标准的消息队列,其支持JMS template,现在我们用Rocketmq,据说很多没有遵循JMS规范,不知道能不能用JMS tem...

PMP4561705
05/14
0
0
架构设计之NodeJS操作消息队列RabbitMQ

一. 什么是消息队列? 消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 消息队列(Message Queue)是一种应用间的通信方...

07/13
0
0
一起学ActiveMQ 01(JMS简介)

介绍JMS JMS API 说明书是Java程序创建,发送,接收异步消息的标准接口。许多企业J或组织实现了JMS规范说明书,就有了JMS产品,有时候叫消息中间件。现在流行的有如下几个 TIBCO EMS (TIBCO...

maxingji
2017/11/05
0
0
activemq的Master Slave(共享文件方式Shared File System Ma)

一、在apache的官网下载apache-activemq-5.11.1-bin.zip 二、在E:toolsapacheactivemqcluster中解压三个mq文件如下: 三、在apache-activemq-5.11.1-1、apache-activemq-5.11.1-2和apache-ac......

chaun
2015/08/14
0
0
rabbitMQ、activeMQ、zeroMQ、Kafka、Redis 比较

Kafka作为时下最流行的开源消息系统,被广泛地应用在数据缓冲、异步通信、汇集日志、系统解耦等方面。相比较于RocketMQ等其他常见消息系统,Kafka在保障了大部分功能特性的同时,还提供了超一...

xumaojun
05/06
0
0
RocketMQ 消息发送与消费源码分析

MQ在我们日常开发过程中有着不可替代的作用,不仅可以帮助我们做到信息在系统间的传递,还能进行系统间的解耦合,也就是说消息的发送端与接收端不会有强依赖关系(例如接口调用)。市场上MQ的...

数齐
07/08
0
0
ActiveMQ初探(2)——与Spring整合

在上一章:ActiveMQ(1)——介绍与基本使用中,我们通过测试方法熟悉了ActiveMQ的流程,本章将ActiveMQ与Spring进行整合。 与Spring整合,除了原本的外,还需导入和包,如果Spring为5.0+,需...

yuanlaijike
05/08
0
0
ActiveMQ在C#中的应用

ActiveMQ是个好东东,不必多说。ActiveMQ提供多种语言支持,如Java, C, C++, C#, Ruby, Perl, Python, PHP等。由于我在windows下开发GUI,比较关心C++和C#,其中C#的ActiveMQ很简单,Apache提...

postdep
2015/08/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

全新内存布局Android5 for one x

众所周知Android5.0默认ART模式,运行速度加倍,软件占用内存也加倍,我们one x这种元老机采用旧的内存布局,data空间2g ART模式下安装几个软件也就不够用了。最近逛国外的xda论坛,发现有大...

CrazyManDF
12分钟前
0
0
web3j转账

 web3 转账功能   为了完成以太坊交易,必须有几个先决条件   1、对方的以太坊地址   2、确定要转账的金额   3、自己地址的转账权限   4、大于转账金额的以太币,以太币转账其实就...

智能合约
13分钟前
0
0
10.28 rsync工具介绍 , rsync常用选项, rsync通过ssh同步

rsync远程同步 重点!重点!!重点!!! 例子 • rsync -av /etc/passwd /tmp/1.txt • rsync -av /tmp/1.txt 192.168.188.128:/tmp/2.txt rsync格式 • rsync [OPTION] … SRC DEST • rs......

Linux_老吴
27分钟前
0
0
iis php 环境搭建,非常详细的教程

准备篇 一、环境说明: 操作系统:Windows Server 2016 PHP版本:php 7.1.0 MySQL版本:MySQL 5.7.17.0 二、相关软件下载: 1、PHP下载地址: http://windows.php.net/downloads/releases/ph...

T_star
29分钟前
0
0
Day35 rsync通过服务同步

rsync通过服务同步 rsyncd.conf配置文件详解 port:指定在哪个端口启动rsyncd服务,默认是873端口。 log file:指定日志文件。 pid file:指定pid文件,这个文件的作用涉及服务的启动、停止等...

杉下
34分钟前
1
0
【最新最全】为 iOS 和 Android 的真机和模拟器编译 Luajit 库

编译 Luajit 库,的确是一个挑战。因为官网的教程,在当前版本的 Xcode 和 NDK 环境中,已经不适用了。以前只是编译了适用于真机的 Luajit 库。最近在尝试编译模拟器 Luajit 库,就顺便梳理了...

ios122
34分钟前
0
0
rsync至ssh同步

rsync: 文件同步工具,可实现“增量拷贝”;使用yum安装rsync包 常用选项:-a=-rtplgoD (-r同步目录,-t保持文件的时间属性,-p保持文件的权限属性,-l保持软连接,-g保持文件的属组,-o保持...

ZHENG-JY
40分钟前
1
0
TradingView 学习笔记

#前言 公司最后需要使用TradingView展示K线图走势。由于之前没接触过,拿到文档时一脸蒙逼。还好找到二篇文章+Demo代码,直接改改就行了。 #被批 由于上面的懵懂,有个问题困扰4个小时没解决...

hihubs
40分钟前
0
0
10.28 rsync工具介绍~10.31 rsync通过ssh同步

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而...

洗香香
43分钟前
1
0
卷积为什么要旋转180度

参考《最容易理解的对卷积(convolution)的解释》 https://blog.csdn.net/bitcarmanlee/article/details/54729807 这篇博客详细讲解了“卷积”,提及了为什么要反转180度,我简述下。 1.卷积的...

datadev_sh
51分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部