KafkaRabbitMQRocketMQ等消息中间件的对比——消息发送性能和区别xiaok1024

带着这个疑问,我们中间件测试组对常见的三类消息产品(Kafka、RabbitMQ、RocketMQ)做了性能比较。

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

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

RocketMQ是阿里开源的消息中间件,它是纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,但并不是Kafka的一个Copy,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景。

测试目的

测试场景

在同步发送场景中,三个消息中间件的表现区分明显:

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,在互联网应用场景中更有它优越的一面。

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

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

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

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

Kafka和RabbitMq一样是通用意图消息代理,他们都是以分布式部署为目的。但是他们对消息语义模型的定义的假设是非常不同的。我对”AMQP更成熟”这个论点是持怀疑态度的。让我们用事实说话来看看用什么解决方案来解决你的问题。a)以下场景你比较适合使用Kafka。你有大量的事件(10万以上/秒)、你需要以分区的,顺序的,至少传递成功一次到混杂了在线和打包消费的消费者、你希望能重读消息、你能接受目前是有限的节点级别高可用或则说你并不介意通过论坛/IRC工具得到还在幼儿阶段的软件的支持。b)以下场景你比较适合使用RabbitMQ。你有较少的事件(2万以上/秒)并且需要通过复杂的路由逻辑去找到消费者、你希望消息传递是可靠的、你并不关心消息传递的顺序、你需要现在就支持集群-节点级别的高可用或则说你需要7*24小时的付费支持(当然也可以通过论坛/IRC工具)。

RabbitMQ,遵循AMQP协议,由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上。

kafka是Linkedin于2010年12月份开源的消息发布订阅系统,它主要用于处理活跃的流式数据,大数据量的数据处理上。

RabbitMQ遵循AMQP协议,RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费(长连接,queue有消息会推送到consumer端,consumer循环从输入流读取数据)。rabbitMQ以broker为中心;有消息的确认机制。

kafka遵从一般的MQ结构,producer,broker,consumer,以consumer为中心,消息的消费信息保存的客户端consumer上,consumer根据消费的点,从broker上批量pull数据;无消息确认机制。

kafka具有高的吞吐量,内部采用消息的批量处理,zero-copy机制,数据的存储和获取是本地磁盘顺序批量操作,具有O(1)的复杂度,消息处理的效率很高。

rabbitMQ在吞吐量方面稍逊于kafka,他们的出发点不一样,rabbitMQ支持对消息的可靠的传递,支持事务,不支持批量的操作;基于存储的可靠性的要求存储可以采用内存或者硬盘。

rabbitMQ支持miror(镜像)的queue,主queue失效,mirorqueue接管。

kafka的broker支持主备模式。

kafka采用zookeeper对集群中的broker、consumer进行管理,可以注册topic到zookeeper上;通过zookeeper的协调机制,producer保存对应topic的broker信息,可以随机或者轮询发送到broker上;并且producer可以基于语义指定分片,消息发送到broker的某分片上。

THE END
1.chatgpt在线和本地部署区别在线部署和本地部署在数据隐私方面也存在一些区别。在线部署将用户的交互数据发送到OpenAI的服务器上进行处理,用户需要考虑其数据隐私的问题。而本地部署可以保证数据的安全性,用户可以完全控制数据的处理和存储,不需要将数据传输到外部服务器。 在模型更新和改进方面,在线部署和本地部署也存在一些差异。在线部署由OpenAIhttp://chatgpt.cmpy.cn/article/1757675.html
2.上传模式与实时模式详解,操作与应用指南(适用于初学者与进阶用户)在数字时代,上传模式和实时模式广泛应用于网络传输和数据交互领域。 1、上传模式:指的是将文件、数据或信息从本地设备发送到服务器或其他设备的过程,您在网络上分享图片、视频或文档时,就是在使用上传模式。 2、实时模式:指的是数据在产生后,能够立即进行传输和共享的模式,在直播、在线会议、实时通讯等领域应用广泛https://www.shuguo168.com/post/11417.html
3.服务器拒绝你发送离线文件怎么回事?一文读懂深度解析与应对策略检查文件内容:在发送前仔细检查文件名和内容,确保不包含任何敏感或非法信息。使用杀毒软件:在发送文件前,先使用杀毒软件对文件进行扫描,确保文件未被病毒感染。四、安全级别设置问题:过高过低皆不宜 QQ软件的安全级别设置也会影响离线文件的发送。如果本地QQ软件的安全级别设置过高,系统会对发送的文件进行更为严格https://baijiahao.baidu.com/s?id=1818543417326663137&wfr=spider&for=pc
4.QQ中的4G在线标志,技术原理与含义解析五金交电摘要:,,本文探讨了QQ上4G在线的含义及其技术原理。4G在线是QQ状态的一种显示,表示用户当前使用的设备正在通过4G网络连接到QQ。背后的技术原理涉及到移动网络的演进和QQ软件的功能设计。通过了解4G网络的高速数据http://xjxygt.cn/post/15467.html
5.机器之间的信息论与人机之间的信息论算法计算机人机交互机器之间的信息论与人机之间的信息论,尽管有很多交集,但它们在焦点和应用上有一些重要区别。 1.机器之间的信息论 机器之间的信息论主要涉及如何在多个机器或计算系统之间传递和处理信息。它通常关注以下几个方面: 信息编码与传输:如何通过物理介质(例如光纤、无线信号等)传递信息。信息理论中通常使用熵(信息量的度量)https://www.163.com/dy/article/JJUR2IOP05566W3H.html
6.在线发送和离线发送的区别爱问知识人离线发送不需要接收方在线,对方离线或者隐身也可以发送;在线发送需要及时接收,离线发送可以保存在服务器https://iask.sina.com.cn/b/new2I0a4geK5Qx.html
7.qq离线发送和在线发送有什么区别知乎在线发你必须等对方现在点接受来才会发送出去 离线发送相当于源先上传到网络,等对方什么时候2113看见了https://m.wenda.so.com/q/1513509019213770
8.聊天在线与离线传输文件qq转离线发送和转在线发送有区别吗微信只支持一种文件发送方式,就是发送方把文件发到文件存储服务,然后接收方从文件服务器进行下载。然而,在古老的QQ软件,是支持在线传输和离线传输(微信模式)。 1.离线传输 称之为离线传输,其实是相对与在线传输而言。在qq的概念里,离线传输就是及时对方不在线,仍然可以向其发送文件。 https://blog.csdn.net/littleschemer/article/details/144161451
9.发在线和发离线有什么区别,怎么选择发在线和发离线有什么区别,怎么选择 发在线 文件是在发送和下载设备之间直接传输,下载完成前发送端必须保持在线,不能关闭网页,也不能断网。(发送端断线后文件将会失效,不过轻松传支持重连,重新上线后文件将恢复,不需要重发) 适合:接收设备就在手边或者接收方也在线。一对一(少)的对传,尤其是局域网内互传,因为https://support.qq.com/embed/phone/348490/faqs-more/?id=109131
10.qq离线文件如何接收怎样发送qq离线文件3、选择要发送的文件,点击确定,文件开始传送。 4、传送完成之后,聊天窗口提示离线文件上传成功,此时作为接收方也会收到提示。 QQ离线文件和在线文件有什么区别 1、文件处理方式不同 在线传送:文件是点对点的,就是文件的发收双方。 离线传送:发送方先将文件上传至服务器,待接收方上线后会收到文件接收通知,直接从服https://www.tianqi.com/toutiao/read/103521.html
11.qq离线qq离线和离线请留言有什么区别离线和离线请留言有什么区别呢?主要有以下几点区别。 离线是指我们的QQ账号处于离线状态,我们无法接收到其他人发送的消息,而离线请留言是指我们给对方发送消息时,对方不在线,我们选择将消息保存在对方的聊天记录中,等到对方上线后才能看到,可以说,离线请留言是一种主动行为,而离线则是一种被动状态。 http://www.m.0632fc.cn/news/29442.html
12.常见问题和群组有什么区别? 一个聊天室支持100万人。聊天室和群组最大的区别在于,聊天室的消息没有推送通知和离线保存,也没有常驻成员的概念,只要进入聊天室即可接收消息,开始聊天, 一旦退出聊天室,不再会接收到任何消息、通知和提醒。注意:进入聊天室会自动获取最近50条消息,客户端目前不支持创建聊天室 实时音视频怎么收费?https://docs.jiguang.cn/jmessage/guideline/faq
13.第五次全国经济普查专项试点数据处理问题解答(一)3.清查调查员和普查调查员账号注册有何要求? 答:清查调查员注册的手机号码须在单位清查平台的调查员管理功能中提前预置。普查调查员注册的手机号码需要在普查登记数据处理平台提前预置,否则无法进行验证码的发送。 4.普查阶段对自主填报的用户有什么要求? https://www.yueyang.gov.cn/tjj/22746/22753/67182/67186/content_2080266.html
14.理解iOS消息推送一文就够:史上最全iOSPush技术详解1)判断app能否在线: 此处可以根据APP自身的后端策略如上一次与后端交互的时间等方法来判断APP能否在线或者者离线。认为在线,会发送在线push,否则,发送离线push。 2)在线push有以下几个特点: 不需要经过苹果APNs; 需要自己实现长链接; 代码在app内部实现。 https://www.songma.com/news/txtlist_i2865v.html
15.王者荣耀里怎么给好友发消息又如何向不在线的好友发送消息王者荣耀通过数年的运行,游戏内容上已经臻至化境,完全可以媲美端游的各项板块,不过新手玩家在进入游戏后,会遇到一系列问题,比如怎么给在线的微信好友发消息,不在线的好友是不是不能发送离线消息,其实这些当然都是可以的! 王者荣耀给好友发消息玩法: 玩家点击进入王者荣耀主页面,直接点击左下方世界聊天频道,里面有喊话功https://www.qqtn.com/article/article_192864_1.html
16.一文搞懂:Web3.0钱包是什么?如何创建和使用?如何确保安全?发送和接收加密货币:用户可以通过Web3钱包发送和接收加密货币,完成各种支付和交易。 管理区块链地址:每个Web3钱包都会生成一对公钥和私钥,用于管理区块链上的地址。 连接DApps:Web3钱包允许用户连接并与各种DApps进行交互,如借贷平台、去中心化交易所等。 https://www.528btc.com/zhuanti/1316042.html
17.质检培训完整操作指南针对自定义添加的质检标准,如果是有规律可循的标准,建议选择规则检出,然后把规则配起来,规则支持买家咨询商品/买家咨询时间/买家消息内容/客服消息发送位置/是否下单/客服回复行为/等多条件。 设置自定义规则检出后,满足规则条件的会话会自动打上扣分项或加分项的标签。 https://www.360doc.cn/article/27880450_1075329921.html
18.11家最佳电子邮件服务提供商(2022年免费)通过自动操作保护您的帐户,并远离垃圾邮件发送者的异常活动。 它适用于 iOS 和 android 设备,即使离线也能个性化您的体验。 通过添加用户、管理组别名和设置策略,主控制面板可以轻松配置、自定义和调整您的电子邮件内容。 通过右键单击搜索来自任何发件人的电子邮件,并提供 50 多个键盘快捷键。 https://www.douban.com/note/828512166/
19.基于WebSocket技术的即时通讯51CTO博客我们可以把第一种方式称作在线发送。可以把第二种方式称作离线发送。很显然在线发送的即时性比较好,但对技术的要求显然更高(特别是对于JavaScript这种技术在读写本地磁盘方面有着很大的局限性),同时也要求两个客户端必须同时在线。所以可以在WEB上考虑第二种方式是目前阶段比较理智的行为。http://bewweb.blog.51cto.com/12604306/1900201
20.揭秘QQ文件传输,是否全经服务器转发及传输速度解析QQ在线发送和离线发送的区别 1、在线发送文件需要双方同时在线,而离线发送文件则不需要接收方在线,离线发送时,发送方只需将文件上传至服务器,接收方上线后会收到文件接收通知,然后从服务器下载文件。 2、在线发送是点对点传输,文件大小没有限制,但不能传送文件夹;离线发送则是将文件上传至服务器,待接收方上线后下载http://www.cloud12.cn/53B2f5776b6a.html
21.肇庆用友U8+V15.0的行业插件后续适配发版,以《U8+V15.0行业插件发在金税开票界面,可以选择需要开具发票的电商订单记录进行开票和红冲操作。 对于电子发票,可以根据电商订单的信息推式生成发票管理中销项发票的待开票记录。 在发票管理模块中进行电子发票的具体开票作业,企业可以将电商订单中销售数据直接在线开具电子发票,生成电子成票PDF文件,并可以通过客户的电子邮件地址,直接发送到客户邮https://www.ufida168.com/case_detail/2782.html
22.邮件toccbcc区别宜搭版本区别M2与D2的区别 您好,M2和D2区别如下:M2:智能前台考勤,支持离线储存1000张人脸;D2:门禁功能+考勤,支持离线储存10000张人脸。 查看详情 如何查看自己发送的钉钉邮件 您好,若需要查看【已发送】的邮件明细,查看路径如下:【手机端钉钉】-【工作台】-【邮箱】-【收件箱】-【已发送】;【电脑端钉钉】- 左侧【邮https://www.dingtalk.com/qidian/help-keyword-128157.html