论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
大数据
›
数据仓库与分析
›
Kafka的零拷贝
Kafka的零拷贝
万万哇
论坛元老
|
2025-4-8 07:55:53
|
显示全部楼层
|
阅读模式
楼主
主题
1699
|
帖子
1699
|
积分
5097
Kafka的零拷贝(Zero-Copy)技术是其实现高吞吐量的关键优化之一,重要通过淘汰数据在内核空间和用户空间之间的冗余复制及上下文切换来提拔性能。以下是其焦点要点:
1.
传统数据拷贝的问题
多次复制
:传统文件传输需经历多次数据拷贝(磁盘→内核缓冲区→用户空间→Socket缓冲区→网络),消耗CPU和内存带宽。
上下文切换
:用户态与内核态的频繁切换增长延迟。
生存消息的流程
消耗消息时,会先从页缓存中获取消息,如果没有就会经历四次拷贝来发送消息到消耗者。(下图中赤色箭头表示:磁盘→内核缓冲区→用户空间→Socket缓冲区→网络)
2.
Kafka的零拷贝实现(零CPU拷贝)
使用sendfile系统调用
:
Kafka消耗者从Broker拉取数据时,Broker通过sendfile直接将磁盘文件的数据从内核缓冲区传输到网卡缓冲区,绕过用户空间(如上图)。
依靠Linux等操作系统的支持,Java中通过FileChannel.transferTo()实现。
mmap(内存映射)
:
mmap()操作系统内核提供的一个方法,将内核空间的缓冲区映射到用户空间。
生产者写入时,Kafka可能使用mmap将磁盘文件映射到内存,实现内核与用户空间共享数据,淘汰复制(通过映射淘汰的是内核到用户空间的拷贝)。
但mmap存在同步开销(如页错误),通常更适用于特定场景。
3.
零拷贝的优势
降低CPU使用
:避免冗余数据复制,淘汰计算资源消耗。
提拔吞吐量
:淘汰I/O操作步骤,加快数据传输速度。
淘汰延迟
:淘汰上下文切换次数,提拔响应服从。
4.
应用场景
消耗者读取数据
:零拷贝重要应用于Broker向消耗者发送消息的过程,实现高效网络传输。
生产者写入优化
:结合次序写入和批量处置惩罚,淘汰磁盘寻址开销,但零拷贝重要作用于读取端。
5.
与其他优化协同
次序I/O
:Kafka持久化消息时接纳追加写入(Append-Only),充实利用磁盘次序读写性能。
批量处置惩罚
:合并小消息为批量数据,淘汰网络和I/O调用次数。
6.
留意事项
操作系统依靠
:sendfile需Linux等支持,Kafka在非Linux环境可能性能受限。
数据处置惩罚限制
:零拷贝适用于直接转发数据的场景,若需修改数据(如加密),则无法完全避免复制。
总结
Kafka通过零拷贝技术,结合操作系统的sendfile和mmap机制,最大化淘汰了数据传输过程中的冗余步骤。这种计划使其在消耗者拉取消息时能够高效利用系统资源,明显提拔吞吐量并降低延迟,成为高并发场景下消息系统的理想选择。
kafka使用sendfile
:返回的是乐成发送了几个字节数,具体发了什么应用层不知道。
rocketMQ使用mmap
:因为mmap返回的是数据的内容,应用层能获取到消息内容举行一些逻辑处置惩罚。rocketmq的一些消息必要获取到消息内容,比较将失败的消息重新投递到死信队列中。
kafka为了性能砍了功能,rocketmq为了功能砍了性能。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
万万哇
论坛元老
这个人很懒什么都没写!
楼主热帖
markdown day 01
Linux系统调用四、lseek()函数详解 ...
Nacos注册中心-----从0开始搭建和使用 ...
ClickHouse(05)ClickHouse数据类型详解 ...
基于CSDN云和docker全家桶的微服务项目 ...
【云原生】Docker 进阶 -- 数据卷使用 ...
100天精通Python(进阶篇)——第39天 ...
应急救灾物资行业标准与规范 ...
阿里云域名购买流程以及免费证书的申请 ...
读Java性能权威指南(第2版)笔记02_ J ...
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
DevOps与敏捷开发
物联网
MES
虚拟化与私有云
Java
Oracle
SQL-Server
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表