消息队列对比

引用:

常用消息队列对比
消息队列及常见消息队列介绍

常用消息队列

1. RabbitMQ

用erlang语言开发的消息队列系统,支持很多协议:AMQP,XMPP,SMTP,STOMP。非常重量级,适合企业级开发。核心是生产者不会将消息直接发送给队列,消息在发送给客户端时先在中心队列排队。对路由(Routing),负载均衡(Load balance)、数据持久化都有很好的支持。

主要特性:

  • 跨平台,支持多种语言客户端
  • 可靠性:提供了多种技术在性能和可靠性之间权衡,包括持久性机制、投递确认、发布者证实、高可用性机制。
  • 灵活的路由:消息在到达队列前通过交换机进行路由。
  • 消息集群:多个RabbitMQ服务器可以聚合在一起,作为一个单独的逻辑代理使用
  • 队列高可用:队列恶意在集群中的机器上进行镜像
  • 支持多种协议
  • 管理界面
  • 跟踪机制
  • 插件机制:提供了许多插件进行多方面扩展,也可以自己编写插件

缺点:

  • erlang不利于二次开发和维护
  • 实现了代理架构,意味着消息在发送到客户端之前可以在中央节点上排队。这个特性使得RabbitMQ易于使用和部署,但是运行速度较慢,消息封装后较大
  • 需要学习比较复杂的接口和协议
2. ActiveMQ

由Apache出品的开源消息队列系统,是一个完全支持JMS 1.1和J2EE 1.4规范的JMS Provider实现。少量代码就可以高效实现高级应用场景,可插拔的传输协议支持。

主要特性:

  • 服从JMS规范
  • 连接性:支持多协议
  • 持久化插件和安全插件
  • 代理集群:多个ActiveMQ代理可以组成集群
  • 异常简单的管理

优点:

  • 跨平台,支持多种语言客户端
  • 可以用JDBC持久化数据到数据库
  • 支持JMS
  • 支持自动重连
  • 有安全机制,可以对Queue和Topic进行认证和授权
  • 监控完善
  • 界面友善

缺点:

  • 社区活跃度不及RabbitMQ高
  • 不适用于上千个队列的应用场景,而且据说会丢消息
  • 目前重心在下一代产品Apollo上
3. RocketMQ

阿里的开源产品,用Java实现,参照kafka设计思想。

主要特性:

  • 高性能、高可靠、高事实、分布式
  • Producer、Consumer、队列都可以分布式
  • Producer向一些队列轮流发送消息,队列集合称为Topic,Consumer如果做广播消费,则一个Consumer实例消费这个Topic对应的所有队列,如果做集群消费,则多个Consumer实例平均消费这个topic对应的队列集合
  • 能够保证严格的消息顺序
  • 提供针对消息的过滤功能
  • 提供丰富的消息拉取模式
  • 高效的订阅者水平扩展能力
  • 实时的消息订阅机制
  • 亿级消息堆积能力
  • 较少的依赖

优点:

  • 单机支持1万以上持久化队列
  • RocketMQ的所有消息都是持久化的,先写入系统PageCache,然后刷盘,保证内存和磁盘都有一份数据,访问时直接从内存读取
  • 模型简单,接口易用
  • 性能好,可以大量堆积消息在broker中
  • 支持多种消费,包括集群消费、广播消费等
  • 多个环节分布式扩展设计,主从HA
  • 开发度较活跃,版本更新很快

缺点:

  • 支持的客户端语言不多,只有java和c++,主要是java
  • 社区关注度和成熟度不高
  • 没有web管理界面
  • 没有实现JMS等接口
4. ZeroMQ

C语言开发的,号称史上最快的消息队列,专为高吞吐量/低延迟的场景开发,可以在任何平台通过任何代码连接,通过inproc(进程内)、IPC(进程间)、TCP、TIPC、多播传送消息,支持发布-订阅、推-拉、共享队列等模式,高速异步IO引擎。

主要特性:

  • 无锁的队列模型
    对于跨线程间的交互的数据交换通道pipe,采用无锁的队列算法CAS,在pipe两端注册有异步事件,在读或者写消息到pipe时,会自动触发读写事件
  • 批量处理的算法
  • 多核下的线程绑定,无需CPU切换

优点:

  • 高吞吐,低延迟
  • 简单灵活,专注传输层,使Socket编程更加简单

缺点:

  • 要当消息队列用的话二次开发量大
  • 不支持消息持久化
  • 需要自己保证可靠性
5. Kafka

Linkedin发布并开源的分布式消息发布订阅系统,现在是Apache的顶级项目

主要特性:

  • 快速持久化,通过磁盘顺序读写和零拷贝机制,可以在O(1)的系统开销下进行消息持久化
  • 高吞吐,在一台普通的服务器上可以达到10W/s的吞吐速率
  • 完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现负载均衡
  • 支持同步和异步复制两种高可用性集群
  • 支持数据批量发送和拉取
  • 数据迁移、扩容对用户透明
  • 无需停机即可扩展机器
  • 严格的消息顺序
  • 丰富的消息拉取模型
  • 高效订阅者水平扩展
  • 实时消息订阅
  • 亿级消息堆积能力
  • 定期删除机制

优点:

  • 支持多种语言客户端
  • 性能好
  • 完全分布式架构,并有replica机制,拥有较高的可用性和可靠性,理论上支持消息无限堆积
  • 支持批量操作
  • 消费者采用Pull方式获取消息,消息有序,通过控制能够保证所有消息被消费且仅被消费一次
  • 有优秀的第三方Kafka Web管理界面Kafka-Manager
  • 在日志领域比较成熟

缺点:

  • Kafka单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长
  • 使用短轮询方式,实时性取决于轮询间隔时间
  • 消费失败不支持重试
  • 支持消息顺序,但是一台代理宕机后,就会产生消息乱序
  • 社区更新较慢
6. CMQ

CMQ(Cloud Message Queue) 是腾讯云基于开源消息引擎自研的一个是分布式消息系统。

主要特性:

  • 消息生产实时3副本落盘
  • 分布式Raft算法保证消息强一致
  • 提供消息发布订阅、消息回溯、消息一对多投递、顺序消息等服务
  • 具有高可靠、高可用、跨IDC、透明动态伸缩、消息接近生产消费等优势。
其他

比如Redis

MQ对比
-- RabbitMQ ActiveMQ RocketMQ Kafka CMQ
社区/公司 Mozilla Public License Apache 阿里巴巴 Apache 腾讯
开发语言 Erlang Java Java Scala & Java 应该是C++
客户端语言 多语言 多语言 Java,C++ Java为主,语言无关 多语言
协议支持 多协议支持 多协议支持 自定义 Tcp之上自定义 目前HTTP
消息批量操作 不支持 支持 支持 支持 支持
消息推拉模式 Pull,Push Pull,Push Pull,Push Pull Pull,Push
高可用 Master/Slave,master提供服务,slave备份 基于ZooKeeper + LevelDB的MS 支持多M,多MS,异步复制模式,多M多S模式,同步双写 replica机制,leader宕机会重新选举 leader重新选举
数据可靠性 可靠 M/S 可靠 可靠 可靠
单机吞吐量 万级 万级 低十万级 高十万级 高万级
消息延迟 微秒级 - - 毫秒级 毫秒级
持久化能力 内存+文件,堆积量影响生产速率 内存+文件+数据库 磁盘文件 磁盘文件 磁盘
是否有序 单Client有序 可以有序 有序 多Client有序 单Client有序
支持事务 支持 支持 支持 不支持,但是可以通过Low Level API 保证仅消费一次 不支持
集群 支持 支持 支持 支持 支持
负载均衡 支持 支持 支持 支持 支持
管理界面 较好 一般 命令行 官方只有命令行 较好
部署方式 独立 独立 独立 独立 -
适合场景 非海量高可靠 非海量高可靠 海量大规模分布式系统 日志等海量数据流 -
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • 以下是消息队列以下的大纲,本文主要介绍消息队列概述,消息队列应用场景和消息中间件示例(电商,日志系统)。 本次分享...
    文档随手记阅读 1,863评论 0 28
  • 一、 消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。实现高性能...
    步积阅读 56,520评论 10 138
  • 消息队列设计精要 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终...
    meng_philip123阅读 1,492评论 1 25
  • 每个人都希望被这个世界温柔地对待,但是没有冲突,没有不满,没有人告诉你你其实很一般,很多时候我们就只会温柔滴待在原...
    一一小知阅读 143评论 0 0