论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
大数据
›
数据仓库与分析
›
Kafka 性能为什么比RocketMQ 高
Kafka 性能为什么比RocketMQ 高
一给
论坛元老
|
2025-3-28 11:01:43
|
显示全部楼层
|
阅读模式
楼主
主题
1855
|
帖子
1855
|
积分
5565
一、引言
在消息队列范畴,Kafka 和 RocketMQ 都是备受关注的产品。RocketMQ 参考了 Kafka 的设计思绪,在简化架构的同时丰富了功能。然而,尽管 RocketMQ 看起来功能强盛,但 Kafka 始终在市场中占据重要地位且未被镌汰。此中一个关键因素便是性能,本文将深入探究 Kafka 性能为何高于 RocketMQ,以及背后涉及的关键技能 —— 零拷贝技能。
二、性能数据对比
性能指标中的吞吐量数据体现,RocketMQ 每秒能处理 10 万量级的数据,而 Kafka 则能达到 17 万量级。这表明在吞吐量方面,Kafka 的性能更为强劲。
三、零拷贝技能详解
3.1 传统数据传输过程
在消息队列场景中,消息通常存储在磁盘以防止历程瓦解时丢失。当消息从消息队列磁盘发送到消耗者时,传统的数据传输过程如下:
用户空间与内核空间
:操作系统分为用户空间和内核空间,步伐处于用户空间,磁盘属于硬件设备,需通过操作系统调用硬件本领。
数据传输步骤
:
步伐发起系统调用 read,将磁盘数据从设备拷贝到内核空间的缓冲区。
数据再从内核空间的缓冲区拷贝到用户空间。
步伐发起系统调用 write,将数据从用户空间拷贝到 socket 发送缓冲区。
数据从 socket 发送缓冲区拷贝到网卡,终极经网络到达消耗者。
3.传统传输的弊端
:
整个过程在本机内发生了两次系统调用,对应 4 次用户空间和内核空间的切换,以及 4 次数据拷贝。这种多次的数据拷贝导致效率低下。
3.2 mmap 零拷贝技能
3.2.1 mmap 原理
mmap 是操作系统内核提供的一个方法,它可以将内核空间的缓冲区映射到用户空间。使用 mmap 后,数据发送流程发生如下变化:
步伐发起系统调用 mmap,将磁盘数据从设备拷贝到内核空间的缓冲区,并映射到用户空间(此步无需数据拷贝)。
步伐发起系统调用,将数据从内核空间缓冲区拷贝到 socket 的发送缓冲区。
数据从 socket 缓冲区发送到网卡。
3.2.2 mmap 优势与不敷
整个过程发生了两次系统调用,对应 4 次用户空间和内核空间的切换以及 3 次数据拷贝,相比传统方式省下了一次内核空间到用户空间的拷贝。但需要注意的是,mmap 所说的 “零拷贝” 是指用户空间到内核空间这个过程不需要拷贝,并非数据从磁盘发送到网卡的整个过程没有拷贝。
3.3 sendfile 零拷贝技能
3.3.1 sendfile 原理
sendfile 同样是内核提供的方法,从名字可看出是用于发送文件数据。其数据传输过程如下:
步伐发起系统调用 sendfile,内核将数据从磁盘设备拷贝到内核空间的缓冲区。
内核空间缓冲区里的数据可以直接拷贝到网卡。
上图红色字体的过程为改进点。它把数据描述信息读到socket的缓冲区中,DMA Gather Copy根据socket缓冲的数据描述信息批量的从pageCache中读取到网卡设备上。至此剩余的一次pageCache到socket缓冲的cpu拷贝也被节省掉了。
3.3.2 sendfile 优势
整个过程仅发生了一次系统调用,对应两次用户空间和内核空间的切换,以及两次数据拷贝。这里所说的 “零拷贝” 指的是 0 CPU 拷贝,在 sendfile 场景下需要的两次拷贝都是由 DMA 控制器完成,不占用 CPU 资源,不耽误 CPU 运行其他步伐。
四、Kafka 与 RocketMQ 性能差别原因
RocketMQ 使用的是 MMAP 技能,而 Kafka 使用的是 sendfile 技能。由于 sendfile 技能在系统调用次数以及系统内核切换次数上的优势,使得 Kafka 得到了更高的性能。
4.1 RocketMQ 不使用 sendfile 的原因
函数特性差别
:
MMAP 函数返回的是数据的具体内容,应用步伐可以或许获取到消息内容并举行逻辑处理。
sendfile 函数返回的则是成功发送的字节数,应用层无法得知具体发送的内容。
RocketMQ 功能需求
:RocketMQ 的一些功能,如将消耗失败的消息重新投递到死信队列中,需要了解具体的消息内容。假如 RocketMQ 使用 sendfile,将无法获取消息内容,进而无法实现这些功能。而 Kafka 没有此类对消息内容深度处理的功能特性,更专注于追求极致性能,所以可以使用 sendfile 技能。
五、Kafka 高性能的其他因素
除了零拷贝技能,Kafka 高性能还得益于其他一些优化本领,比方数据压缩等。这些优化本领 RocketMQ 也可以或许借鉴。但在零拷贝技能的选择上,由于各自功能特性的差别,RocketMQ 无法采用 Kafka 所使用的 sendfile 技能。
六、Kafka 和 RocketMQ 的选择建议
经常有人询问 Kafka 和 RocketMQ 该怎样选择。从实际应用场景出发,假如是大数据场景,频繁涉及到如 Spark、Flink 等关键词时,建议使用 Kafka。而在其他场景下,优先选择 RocketMQ。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
一给
论坛元老
这个人很懒什么都没写!
楼主热帖
手把手教你如何使用kali破解wifi密码( ...
3.2操作系统(基本分页存储管理的基本 ...
C++面试八股文:std::array如何实现编 ...
嵌入式 Linux 内核驱动开发【The first ...
零基础入门 Java 后端开发,有哪些值得 ...
你真的了解二叉树吗?(上篇) ...
软件开发中,如何为你的代码构建三层防 ...
Wireshark学习笔记(一)常用功能案例 ...
上古神兵,先天至宝,Win11平台安装和配 ...
Kubernetes(K8S) Deployment 升级和回 ...
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
Java
运维.售后
Oracle
鸿蒙
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表