如果你了解过 Kafka,那么它用到的一个性能优化技术可能会引起你的注意 -- 操作系统的零拷贝(zero-copy)优化。

零拷贝操作可以避免对数据的非必要拷贝,当然,并非是说完全没有拷贝。

在 Kafka 的场景下,操作系统可以从 page cache 拷贝数据到 socket buffer,直接绕过 Kafka broker 这个 Java 程序。这可以节省一些额外的拷贝,节省一些用户态和内核态的切换。让我们看一个例子。

传统拷贝

如果您的应用程序要从磁盘读取文件并通过网络发送它,则可能会进行一堆不必要的拷贝,以及用户态/内核态的切换。

一些术语:

  • read buffer: 读缓冲区,操作系统的 page cache
  • socket buffer: 套接字缓冲区,OS 用于管理数据包的字节缓冲区
  • NIC buffer: 网卡中的字节缓冲区
  • DMA copy: DMA 是 Direct Memory Access 的缩写,是内存控制器的一个功能,可以避免 CPU 的干预,允许硬件(图形卡、声卡、网卡等)直接访问内存 (RAM) 里的某些数据

在这个例子中,我们有 4 次模式切换(用户态和内核态之间的切换)和 4 次数据拷贝。

  • 应用程序(这里指 Kafka)利用 DMA copy 从磁盘 load 数据到 read buffer(用户态->内核态
  • read buffer 到应用程序的缓存区(内核态->用户态
  • 应用程序要发数据到网络上,实际是先写到 socket buffer(用户态->内核态
  • socket buffer 到 NIC buffer(响应数据写完之后,由内核态返回用户态)

零拷贝

为了减少拷贝,把数据从磁盘直接发向网络,那 Kafka 在存储数据的时候,就要保证存储的数据格式和将要发出的 response 格式一致。

在传统拷贝模式下,第二步、第三步没啥意义,因为 Kafka 没有对数据做额外处理,只是简单转发。那能否从磁盘直接发向网络呢?答案是肯定的。通过零拷贝技术,磁盘上的数据还是要先进入 read buffer,然后不用再拷贝到应用程序的缓存区,而是直接拷贝到 NIC buffer,图上的步骤 2:Appends just file descriptors,只是把文件描述符交给了 Socket buffer,实际数据并没有拷贝给 Socket buffer。这就是所谓的 scatter-gather 操作(也称为 Vectorized I/O),scatter-gather 是仅将 read buffer 数据指针存储在 socket buffer 中,并让 DMA 直接从内存读取数据的行为。

最终结果如何呢?

  • 4 次模式切换变成了 2 次
  • 2 次 DMA 拷贝,仍然是 2 次
  • 1 次微小的指针拷贝

在 Kafka 中

你可能听过 Kafka 因为零拷贝实现了高性能,但是理想很丰满现实很骨感,零拷贝技术在大部分 Kafka 集群中并没有那么大的影响力。

  • CPU 很少成为瓶颈。网络饱和的速度要快得多,因此在大多数情况下,内存中副本的缺失并不会带来多大的影响。
  • 启用加密和 SSL/TLS 已经禁止 Kafka 使用零拷贝

原文:​​​https://2minutestreaming.beehiiv.com/p/apache-kafka-zero-copy-operating-system-optimization​​​

译者:巴辉特,极客时间专栏《运维监控系统实战笔记》作者,Open-Falcon、Nightingale 开源项目发起人,目前创业中,作为 Flashcat 联合创始人,专攻监控/可观测性方向。欢迎和我一起探讨监控/可观测性相关技术和产品。

SRE 必备知识 - Kafka 探秘之零拷贝技术的更多相关文章

  1. Linux 中的零拷贝技术,第 2 部分

    技术实现 本系列由两篇文章组成,介绍了当前用于 Linux 操作系统上的几种零拷贝技术,简单描述了各种零拷贝技术的实现,以及它们的特点和适用场景.第一部分主要介绍了一些零拷贝技术的相关背景知识,简要概 ...

  2. Linux 中的零拷贝技术,第 1 部分

    概述 本系列由两篇文章组成,介绍了当前用于 Linux 操作系统上的几种零拷贝技术,简单描述了各种零拷贝技术的实现,以及它们的特点和适用场景.本文是本系列文章的第一部分,主要是介绍一些零拷贝技术的相关 ...

  3. Java基础-零拷贝技术应用案例

    Java基础-零拷贝技术应用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 零拷贝技术在Hadoop生态圈中很多组件得到应用,典型的比如kafka组件,它就很成功的应用了零拷贝 ...

  4. [转帖]Linux 中的零拷贝技术,第 1 部分

    Linux 中的零拷贝技术,第 1 部分 https://www.ibm.com/developerworks/cn/linux/l-cn-zerocopy1/index.html   引言 传统的 ...

  5. 操作系统IO之零拷贝技术

    磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝.直接 I/O.异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统 ...

  6. [软件体系结构/架构]零拷贝技术(Zero-copy)[转发]

    0 前言 近期遇到难题:1个大数据集的查询导出API,因从数据库查询后占用内存极大,每次调用将消耗近100MB的JVM内存资源.故现需考虑研究和应用零拷贝技术. 如下全文摘自: 看一遍就理解:零拷贝原 ...

  7. Linux 零拷贝技术

    简介 零拷贝(zero-copy)技术可以减少数据拷贝和共享总线操作的次数,消除通信数据在存储器之间不必要的中间拷贝过程,有效地提高通信效率,是设计高速接口通道.实现高速服务器和路由器的关键技术之一. ...

  8. Linux中的零拷贝技术

    转载:https://www.jianshu.com/p/fad3339e3448 引文## 在写一个服务端程序时(Web Server或者文件服务器),文件下载是一个基本功能.这时候服务端的任务是: ...

  9. Linux零拷贝技术,看完这篇文章就懂了

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,欢迎大家关注,二维码文末可以扫. 本文讲解 ...

  10. Linux零拷贝技术 直接 io

    Linux零拷贝技术 .https://kknews.cc/code/2yeazxe.html   https://zhuanlan.zhihu.com/p/76640160 https://clou ...

随机推荐

  1. fseek在 fopen 带有'a'模式下不起作用

    关于 fseek 在 追加写模式的注意事项 结论:fseek在 fopen 带有'a'模式的文件指针偏移不起作用. int main(int argc, char *argv[]) { FILE * ...

  2. Linux 错误码

    背景 Linux的错误码包含在/usr/include/asm-generic/errno-base.h和/usr/include/asm-generic/errno.h 这两个文件内. 可用于查询. ...

  3. 攻防世界——Misc新手练习区解题总结<4>(11、12题)

    第十一题ext3: 方法一:挂载 需要工具:kali虚拟机 下载附件后得到一个linux的系统光盘,我们用kali挂载一下 mount 123 /mnt//123为要挂载的文件名 寻找flag.txt ...

  4. 【资料分享】RK3568核心板规格书(4x ARM Cortex-A55(64bit),主频1.8GHz)

    1 核心板简介 创龙科技SOM-TL3568是一款基于瑞芯微RK3568J/RK3568B2处理器设计的四核ARM Cortex-A55全国产工业核心板,每核主频高达1.8GHz/2.0GHz.核心板 ...

  5. Coding:小写一个debugfs

    Coding:小写一个debugfs ​ 上一次整活还是在上一个月,写了一个简单的module并且熟悉了module的挂载查看和卸载.这一次我们自然玩一个大的,就是利用linux的debugfs AP ...

  6. 4. 简明说一下 CSS link 与 @import 的区别和用法?

    两者的基本语法 link语法结构 <link href="外部CSS文件的URL路径" rel="stylesheet" type="text/ ...

  7. 洛谷P1747

    这个题被坑麻了,题目居然不给棋盘的范围,评论区居然有人说棋盘是无限大的,我想说的是如果真是这样那么第9个点答案应该是2而不是3,这个棋盘绝对是有大小的. #include<iostream> ...

  8. 移动web开发适配秘籍Rem

    目录 移动web开发的特点 Rem 布局适配原理 Media Query(媒体查询) scss 工程使用函数计算 JS动态获取屏幕的宽度 直接将html 的 font-size 设置成 100px 移 ...

  9. oeasy教您玩转vim - 43 - # 替换模式

    ​ 替换模式 回忆上节课内容 上次我们学到的最有用的就是c 他和d的区别就是删除之后进入到插入模式 c可以配合motion 可以用ciw来快速删除当前光标所在的单词 可i和a 配合的文字块 w wor ...

  10. 【JS】01 JavaScript概述

    感觉上来谈这个前端,结构的部分是使用了标签语言定义了页面的文档内容 但是XML和HTML的功能完全相反,XML被用于存储信息,而HTML则用于定义网页结构,辅助其他内容渲染 然后C3又可以通过选择器这 ...