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.QQ在线传文件,高效便捷的文件传输新选择电源摘要:QQ在线传文件是一种高效便捷的文件传输方式。用户可以通过QQ聊天窗口直接发送和接收文件,实现快速的文件传输。这种方式不仅简单易用,而且传输速度较快,广泛应用于个人、企业和组织之间的文件共享和交换。QQ在线传文件已成为现代通讯中不可或缺的一部分。 http://m.zj-xy.net/post/21455.html
2.QQ中的4G在线标志,技术原理与含义解析五金交电在QQ中,用户的网络状态标识是判断其是否在线以及当前网络状况的重要依据,这些状态标识包括“在线”、“离线”、“忙碌”、“隐身”等。“在线”表示用户当前正在使用QQ,且网络连接正常;“离线”则表示用户当前未登录或网络断开,而“忙碌”和“隐身”则是用户根据自己的需求设置的特殊状态,近年来,随着智能手机的普及和http://xjxygt.cn/post/15467.html
3.IM小程序能否支持离线消息功能?离线消息的存储和同步需要高效的数据处理能力,如何在有限的资源下优化性能,是一个技术难题。 五、实现离线消息功能的几种方案 1. 基于服务器端存储的方案 原理:服务器端维护一个离线消息队列,当用户离线时,将发送给该用户的消息存入队列;用户上线后,从队列中取出消息并推送。 https://www.huanxin.com/news/13323
4.离线发送文件和在线发送文件有区别吗?在线发送文件与离线发送文件的区别是:一、所指对象不一样 平时所说的在线发送文件必须要接收双方同时在线,就相当于你在玩电脑,另外一方也得在玩电脑或者手机,这样才可以在线发送;而离线发送文件是不需要接收方同时在线的。二、时间不一样 在线发送文件必须要接收双方同时在场,离线发送文件是可以在接收https://zhidao.baidu.com/question/699573959094688004.html
5.在线发送和离线发送的区别爱问知识人区别:在线发送需要双方都在线,离线发送不需要接收方在线,对方离线或者隐身也可以发送;在线发送需要及时https://iask.sina.com.cn/b/new2I0a4geK5Qx.html
6.qq离线文件如何接收怎样发送qq离线文件2、在弹出来的下拉窗口选择“发送离线文件” 3、选择要发送的文件,点击确定,文件开始传送。 4、传送完成之后,聊天窗口提示离线文件上传成功,此时作为接收方也会收到提示。 QQ离线文件和在线文件有什么区别 1、文件处理方式不同 在线传送:文件是点对点的,就是文件的发收双方。 https://www.tianqi.com/toutiao/read/103521.html
7.qq离线qq离线和离线请留言有什么区别离线和离线请留言有什么区别呢?主要有以下几点区别。 离线是指我们的QQ账号处于离线状态,我们无法接收到其他人发送的消息,而离线请留言是指我们给对方发送消息时,对方不在线,我们选择将消息保存在对方的聊天记录中,等到对方上线后才能看到,可以说,离线请留言是一种主动行为,而离线则是一种被动状态。 http://www.m.0632fc.cn/news/29442.html
8.常见问题和群组有什么区别? 一个聊天室支持100万人。聊天室和群组最大的区别在于,聊天室的消息没有推送通知和离线保存,也没有常驻成员的概念,只要进入聊天室即可接收消息,开始聊天, 一旦退出聊天室,不再会接收到任何消息、通知和提醒。注意:进入聊天室会自动获取最近50条消息,客户端目前不支持创建聊天室 实时音视频怎么收费?https://docs.jiguang.cn/jmessage/guideline/faq
9.第五次全国经济普查专项试点数据处理问题解答(一)3.清查调查员和普查调查员账号注册有何要求? 答:清查调查员注册的手机号码须在单位清查平台的调查员管理功能中提前预置。普查调查员注册的手机号码需要在普查登记数据处理平台提前预置,否则无法进行验证码的发送。 4.普查阶段对自主填报的用户有什么要求? https://www.yueyang.gov.cn/tjj/22746/22753/67182/67186/content_2080266.html
10.理解iOS消息推送一文就够:史上最全iOSPush技术详解4)UNPushNotificationTrigger 表示通知是从Apple推送通知服务发送的对象。 如果以时间间隔(TimeInterval)来触发,则设置触发器代码为: 推送本地push的代码为: 5、在线、离线(远程)push流程 5.1 在线push流程 在线push相对简单,由于是内部实现,具体流程如上面所示。 https://www.songma.com/news/txtlist_i2865v.html
11.聊天在线与离线传输文件qq转离线发送和转在线发送有区别吗微信只支持一种文件发送方式,就是发送方把文件发到文件存储服务,然后接收方从文件服务器进行下载。然而,在古老的QQ软件,是支持在线传输和离线传输(微信模式)。 1.离线传输 称之为离线传输,其实是相对与在线传输而言。在qq的概念里,离线传输就是及时对方不在线,仍然可以向其发送文件。 https://blog.csdn.net/littleschemer/article/details/144161451
12.什么是QQ离线文件什么是QQ在线文件腾讯微信最近不少人有点迷糊这类问答,其实离线文件和在线文件的区别是在线发送文件是点对点的,就是文件的发收双方。离线文件是发送方先将文件上传至服务器,待接收方上线后会收到文件接收通知,直接从服务器进行下载。 什么是QQ离线文件: 1、离线文件是发送方先将文件上传至服务器;http://www.puhuahui.com/4363.html
13.qq离线是退出账号了吗?离线和退出有什么区别 离线和退出在功能上有一些差别。当你选择退出QQ时,你的账号会完全退出,无法接收和发送消息。而选择离线则不同,你的账号依然登录,只是临时关闭了消息接收功能。 当你处于离线状态时,其他好友并不能把你从他们的好友列表中删除,因为虽然你不在线,但你的状态仍然是存在的。 https://www.xiedaoicec.com/2e419613ecf8b26e.html
14.qq离线请留言什么意思(qq显示的离线请留言和离线有什么区别)今天来给大家分享一下关于qq离线请留言什么意思的问题,以下是对此问题的归纳整理,让我们一起来看看吧。 qq离线请留言什么意思 qq离线请留言的意思是好友不在线,但是已经设置接收离线消息了,即使不在线也可以收到;但不超过24小时没有登录QQ。QQ离线的意思是好友不在线,且超过24小时没有登录QQ。 http://www.wengnai.com/html/706009.html
15.千牛挂起和离线的区别,淘宝客服挂起有影响吗?千牛离线:千牛离线状态则表示客服不在线或者不可接受用户消息。在这种状态下,用户发送的消息将无法直接送达客服,需要等待客服上线后才能收到回复。通常情况下,客服处于离线状态可能是因为暂时离开工作岗位,或者已经下班休息。 总的来说,千牛挂起和离线的区别在于客服是否能够接收用户消息和进行回复,挂起表示客服能够接收消息https://www.kaitao.cn/article/20240402122913.htm
16.王者荣耀里怎么给好友发消息又如何向不在线的好友发送消息王者荣耀通过数年的运行,游戏内容上已经臻至化境,完全可以媲美端游的各项板块,不过新手玩家在进入游戏后,会遇到一系列问题,比如怎么给在线的微信好友发消息,不在线的好友是不是不能发送离线消息,其实这些当然都是可以的! 王者荣耀给好友发消息玩法: 玩家点击进入王者荣耀主页面,直接点击左下方世界聊天频道,里面有喊话功https://www.qqtn.com/article/article_192864_1.html
17.11家最佳电子邮件服务提供商(2022年免费)通过自动操作保护您的帐户,并远离垃圾邮件发送者的异常活动。 它适用于 iOS 和 android 设备,即使离线也能个性化您的体验。 通过添加用户、管理组别名和设置策略,主控制面板可以轻松配置、自定义和调整您的电子邮件内容。 通过右键单击搜索来自任何发件人的电子邮件,并提供 50 多个键盘快捷键。 https://www.douban.com/note/828512166/
18.一文搞懂:Web3.0钱包是什么?如何创建和使用?如何确保安全?硬件钱包是专用的物理设备,设计用于离线存储加密货币私钥。这类钱包提供最高级别的安全性,因为私钥永远不会暴露在联网环境中,防止黑客攻击。 常见的硬件钱包 Ledger:Ledger钱包(如Ledger Nano S和Ledger Nano X)是市场上最受欢迎的硬件钱包之一,支持多种加密货币。它通过USB或蓝牙与计算机或手机连接,提供高度的安全性https://www.528btc.com/zhuanti/1316042.html
19.质检培训完整操作指南针对自定义添加的质检标准,如果是有规律可循的标准,建议选择规则检出,然后把规则配起来,规则支持买家咨询商品/买家咨询时间/买家消息内容/客服消息发送位置/是否下单/客服回复行为/等多条件。 设置自定义规则检出后,满足规则条件的会话会自动打上扣分项或加分项的标签。 https://www.360doc.cn/article/27880450_1075329921.html
20.QQ服务器拒绝发送离线文件的解决方法(对方不在线的情况下)QQ技巧经常会使用QQ来接收和发送文件,如果对方不在线,还可以离线发送文件。但今天遇到了这种情况,发送离线文件时,出现了服务器拒绝了发送请求,这是什么原因,有什么解决方法? 服务器拒绝发送离线文件 服务器拒绝了您发送离线文件的原因: 第一种:传输文件容量超过限制;实际上所有的普通QQ用户都可用使用QQ离线文件功能,只不过https://www.jb51.net/qq/249795.html
21.在Mac上的“邮件”中让电子邮件账户离线或在线让所有账户离线:选取“邮箱”>“让所有账户离线”。 让特定账户离线(如果你有多个账户):选取“邮箱”>“在线状态”>“使[账户]离线”。 “邮件”边栏中账户邮箱旁边和个人收藏栏末尾的闪电图标 表示该账户已离线。 账户离线时,你不能收取或发送邮件,但可以编写邮件以稍后发送。你可以将邮件存储为草稿并于账户再次https://support.apple.com/zh-cn/guide/mail/mlhlp1032/mac