Kafka、RabbitMQ、RocketMQ中间件的对比

news2024/11/27 17:40:16

9ed543d7e6674ae2ab50c6c97fc790e2.gif消息中间件现在有不少,网上很多文章都对其做过对比,在这我对其做进一步总结与整理。

 

 

RocketMQ

淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011年初,Linkin开源了Kafka这个优秀的消息中间件,淘宝中间件团队在对Kafka做过充分Review之后,Kafka无限消息堆积,高效的持久化速度吸引了我们,但是同时发现这个消息系统主要定位于日志传输,对于使用在淘宝交易、订单、充值等场景下还有诸多特性不满足,为此我们重新用Java语言编写了RocketMQ,定位于非日志的可靠消息传输(日志场景也OK),目前RocketMQ在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景。

 

Kafka

Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache定级项目。Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。

 

RabbitMQ

RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

 

 

 

有关测试结论

Kafka的吞吐量高达17.3w/s,不愧是高吞吐量消息中间件的行业老大。这主要取决于它的队列模式保证了写磁盘的过程是线性IO。此时broker磁盘IO已达瓶颈。

 

RocketMQ也表现不俗,吞吐量在11.6w/s,磁盘IO %util已接近100%。RocketMQ的消息写入内存后即返回ack,由单独的线程专门做刷盘的操作,所有的消息均是顺序写文件。

 

RabbitMQ的吞吐量5.95w/s,CPU资源消耗较高。它支持AMQP协议,实现非常重量级,为了保证消息的可靠性在吞吐量上做了取舍。我们还做了RabbitMQ在消息持久化场景下的性能测试,吞吐量在2.6w/s左右。

 

在服务端处理同步发送的性能上,Kafka>RocketMQ>RabbitMQ。

 

对比了最简单的小消息发送场景,Kafka暂时胜出。但是,作为经受过历次双十一洗礼的RocketMQ,在互联网应用场景中更有它优越的一面。

 

 

 

阿里官网对比

功能 消息队列 RocketMQ Apache RocketMQ

(开源) 消息队列 Kafka Apache Kafka

(开源) RabbitMQ

(开源)

安全防护 支持 不支持 支持 不支持 支持

主子账号支持 支持 不支持 支持 不支持 不支持

可靠性 - 同步刷盘

- 同步双写

- 超3份数据副本

- 99.99999999% - 同步刷盘

- 异步刷盘 - 同步刷盘

- 同步双写

- 超3份数据副本

- 99.99999999% 异步刷盘,丢数据概率高 同步刷盘

可用性 - 非常好,99.95%

- Always Writable 好 - 非常好,99.95%

- Always Writable 好 好

横向扩展能力 - 支持平滑扩展

- 支持百万级 QPS 支持 - 支持平滑扩展

- 支持百万级 QPS 支持 - 集群扩容依赖前端

- LVS 负载均衡调度

Low Latency 支持 不支持 支持 不支持 不支持

消费模型 Push / Pull Push / Pull Push / Pull Pull Push / Pull

定时消息 支持(可精确到秒级) 支持(只支持18个固定 Level) 暂不支持 不支持 支持

事务消息 支持 不支持 不支持 不支持 不支持

顺序消息 支持 支持 暂不支持 支持 不支持

全链路消息轨迹 支持 不支持 暂不支持 不支持 不支持

消息堆积能力 百亿级别

不影响性能 百亿级别

影响性能 百亿级别

不影响性能 影响性能 影响性能

消息堆积查询 支持 支持 支持 不支持 不支持

消息回溯 支持 支持 支持 不支持 不支持

消息重试 支持 支持 暂不支持 不支持 支持

死信队列 支持 支持 不支持 不支持 支持

性能(常规) 非常好

百万级 QPS 非常好

十万级 QPS 非常好

百万级 QPS 非常好

百万级 QPS 一般

万级 QPS

性能(万级 Topic 场景) 非常好

百万级 QPS 非常好

十万级 QPS 非常好

百万级 QPS 低 低

性能(海量消息堆积场景) 非常好

百万级 QPS 非常好

十万级 QPS 非常好

百万级 QPS 低 低

 

 

对比

  ActiveMQ RabbitMQ RocketMq ZeroMQ Kafka

关注度 高 高 中 中 高

成 熟度

 

                

 

成熟 成熟 比较成熟 不成熟 成熟

所属社区/公司

 

                       

 

Apache Mozilla

Public

License 

Alibaba

 

Apache

 

   

社区活跃度 高 高 中 低 高

文档 多 多 中 中 多

特点 功能齐全,被大量开源项目使用 由于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、.net 等

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 等接口,    

           

 

RabbitMQ

是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了一个经纪人(Broker)构架,这意味着消息在发送给客户端时先在中心队列排队。对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。

 

Redis

是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。对于RabbitMQ和Redis的入队和出队操作,各执行100万次,每10万次记录一次执行时间。测试数据分为128Bytes、512Bytes、1K和10K四个不同大小的数据。实验表明:入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10K,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis。

 

ZeroMQ

号称最快的消息队列系统,尤其针对大吞吐量的需求场景。ZMQ能够实现RabbitMQ不擅长的高级/复杂的队列,但是开发人员需要自己组合多种技术框架,技术上的复杂度是对这MQ能够应用成功的挑战。ZeroMQ具有一个独特的非中间件的模式,你不需要安装和运行一个消息服务器或中间件,因为你的应用程序将扮演了这个服务角色。你只需要简单的引用ZeroMQ程序库,可以使用NuGet安装,然后你就可以愉快的在应用程序之间发送消息了。但是ZeroMQ仅提供非持久性的队列,也就是说如果down机,数据将会丢失。其中,Twitter的Storm中使用ZeroMQ作为数据流的传输。

 

ActiveMQ

是Apache下的一个子项目。 类似于ZeroMQ,它能够以代理人和点对点的技术实现队列。同时类似于RabbitMQ,它少量代码就可以高效地实现高级应用场景。RabbitMQ、ZeroMQ、ActiveMQ均支持常用的多种语言客户端 C++、Java、.Net,、Python、 Php、 Ruby等。

 

Jafka/Kafka

Kafka是Apache下的一个子项目,是一个高性能跨语言分布式Publish/Subscribe消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。具有以下特性:快速持久化,可以在O(1)的系统开销下进行消息持久化;高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现复杂均衡;支持Hadoop数据并行加载,对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka通过Hadoop的并行加载机制来统一了在线和离线的消息处理,这一点也是本课题所研究系统所看重的。Apache Kafka相对于ActiveMQ是一个非常轻量级的消息系统,除了性能非常好之外,还是一个工作良好的分布式系统。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1160499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

敲敲云零代码平台—近期亮点功能,让开发者对零代码心动~

近期敲敲云零代码平台,更新了很多实用新功能,包括汇总组件添加了筛选条件,增加了汇总日期控件,子表添加了批量添加和默认值等等。 1. 单选/多选/下拉选择 颜色设置 效果展示 在列表和表单中可通过不同颜色显示字段的不同等级或者…

【深⼊理解指针4】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 1. 回调函数是什么? 2. qsort使用举例 2.1测试qsort函数排序整型数组 2.2测试qsort函数排序结构体数组 3. qsort函数的模拟实现 3.1测试bubble_sort函数…

C++对象的内存分布和虚函数表

Linux C/C 开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全) c中一个类中无非有四种成员:静态数据成员和非静态数据成员,静态函数和非静态函数。 1.非静态数据成员被放在每一个对象体内作为对象专有的数据成员。 2.静态数据成员被提取出来…

Linux -------------------设置防火墙和SELinux

(一)防火墙概述 防火墙的概念:防火墙是一种非常重要的网络安全工具,它是网络安全的重要组成部分,用于保护计算机网络免受未经授权的访问、恶意攻击和数据泄漏等威胁等。 防火墙的特点 防火墙通常具备以下几个特点。 …

(免费领源码)springboot#MYSQL钓鱼交友平台小程序33506-计算机毕业设计项目选题推荐

目 录 摘要 1 绪论 1.1课题目的与意义 1.2国内外研究现状 1.3论文结构与章节安排 1.4小程序框架以及目录结构介绍 2 Springboot钓鱼交友平台小程序系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统流程分析 2.2…

Linux内核是如何创建进程?

目录 1.Linux如何创建进程 2.fork函数原理 2.1 fork函数原型 2.2 fork函数实现原理 2.3 父子进程虚拟地址空间(mm_struct)之间的关系 2.4 写时拷贝(copy-on-write)技术 2.5 父子进程如何共享文件(files_struct&…

四十三、【进阶】前缀索引

1、基础 简单点说,前缀索引就是当索引字段类型较大时,有时候需要索引很长的字符串,查询时,会浪费更大的空间,此时可以只对该索引的一部分前缀建立索引,可以大大的节省空间。 前缀索引一般配合选择度进行使用…

多测师肖sir_高级金牌讲师_性能指标

性能指标 一、性能测试指标 性能测试是通过测试工具模拟多种正常、峰值及异常负载条件来对系统的各项性能指标进行测试。 目的:验证软件系统是否能够达到用户提出的性能指标,发现系统中存在的性能瓶颈并加以优化。 二、指标分为两大类: 软件…

ZKP9 SNARKs based on Linear PCP (Pinocchio Groth16)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 9: SNARKs based on Linear PCP (Yupeng Zhang) SNARKs learned so far Earliest Implemented SNARKs Pros Shortest proof size (3 elements [Groth16])Fast verifier (bilinear pairing) Cons FFT and group exponentiatio…

西门子PLC ModbusTcp通信访问网关后从站(SCL语言轮询状态机FB)

西门子PLC的ModbusTcp通信在专栏已有系列文章介绍,所不同的是每个项目的通信需求都略有不同,今天我们以访问网关后的三个从站数据来举例,给出轮询的推荐写法,这里我们利用SCL语音进行编程,方便大家导入导出到自己的项目里使用,相关文章链接大家可以参考下面地址: SMART…

飞致云及其旗下1Panel项目进入2023年第三季度最具成长性开源初创榜单

2023年10月26日,知名风险投资机构Runa Capital发布2023年第三季度ROSS指数(Runa Open Source Startup Index)。ROSS指数按季度汇总并公布在代码托管平台GitHub上年化增长率(AGR)排名前二十位的开源初创公司和开源项目。…

CS224W4.4——矩阵分解和节点Embeddings

我们稍微切换一下方向,讨论生成节点嵌入的矩阵分解方法。具体来说,我们讨论了前面提到的学习节点嵌入的方法如何与矩阵分解的方法联系起来。基于这些直觉,我们提出了基于矩阵分解和随机游走的嵌入方法的3个局限性。在接下来,我们将…

基于51单片机霍尔测速直流电机控制设计

**单片机设计介绍,1658【毕设课设】基于51单片机霍尔测速直流电机控制设计(含源码、原理图、论文、PCB封装) 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 51单片机是微型计算机的一种常见类型,用于处理数…

GB28181协议如何注册

前言 GB28181协议是视频监控领域的国家标准,本文将解析如何在FFmpeg中增加对GB28181协议的支持,使其可以与支持GB28181协议的设备进行通信与控制,实现设备的注册、保活以及流媒体的传输。 1.背景介绍 GB28181协议指的是国家标准GB/T 28181…

S/4 HANA 中的 Email Template

1 如何创建Email Template? 没有特定的事务用于创建电子邮件模板,我们可以将其创建为 SE80 事务中的存储库对象,如下所示: 1,选择包(或本地对象)并右键单击。 2,选择“创建”->“更多”->“电子邮件模板” 尽管如此,对于已有的Email Template,可以使用程序…

音视频开发:音频编码原理+采集+编码实战

原理: 消除冗余信息,压缩量最大,也叫有损压缩 剔除人耳听觉范围外的音频信号20Hz以下和20000Hz以上;去除被掩蔽的音频信号,信号的遮蔽可以分为频域遮蔽和时域遮蔽;频域遮蔽效应 屏蔽70分贝以下&#xff0…

【QT】仿函数

函数调用运算符 () 也可以重载由于重载后使用的方式非常像函数的调用&#xff0c;因此称为仿函数仿函数没有固定写法&#xff0c;非常灵活 示例&#xff1a; #include <iostream> #include <string> using namespace std;class MyPrint { public://重载的运算符是…

MFC网络编程-Udp客户端

目录 1、UI的设计&#xff1a; 2、代码的实现&#xff1a; &#xff08;1&#xff09;、重写CSocket虚函数OnReceive&#xff0c;并且传入对话框的指针 &#xff08;2&#xff09;、初始化SOCKET &#xff08;3&#xff09;、绑定本地IP和端口 &#xff08;4&#xff09;、…

Microsoft SQL Server 缓冲区错误漏洞(CVE-2018-8273)解决方法

前言&#xff1a; 在一次漏洞扫描中&#xff0c;扫描出紧急漏洞Microsoft SQL Server 缓冲区错误漏洞(CVE-2018-8273) 根据修复建议找补丁。 一、漏洞详情 二、寻找补丁 根据漏洞修复建议去下载补丁 目前厂商已发布升级补丁以修复漏洞&#xff0c;补丁获取链接&#xff1a;h…

龙迅视频转换IC LT6711GX适用于HDMI2.1转TPYE-C/DP1.4/EDP功能应用

1.描述 应用功能&#xff1a;LT6711GX适用于HDMI2.1转TPYE-C/DP1.4/EDP 分辨率&#xff1a;最高支持8K30HZ或8K60Hz压缩数据 工作温度范围&#xff1a;−40C to 85C 产品封装&#xff1a;QFN88 &#xff08;10*10&#xff09; 最小包装量&#xff1a;1680PCS 2.产品应用市场 •…