千锋教育-做有情怀、有良心、有品质的职业教育机构

当前位置:首页  >  关于学院  >  技术干货  >  正文

消息系统Kafka笔试题:kafka 高效读写的因素

来源:千锋教育
作者:qyf
2022-08-29
分享

  在磁盘只做 Sequence I/O 顺序读写 kafka 生产者写数据是有序的,即 Partition 内部有序,数据以 append 的方式顺序追加写入。Consumer 消费数据也是有序的,指定 offset 后顺序读出 offset 之后的数据。顺序读写可以避免磁盘读数据时的多次寻道和旋转延迟

  sendfile 零拷贝

  举个例子说明传统IO流程,比如:从磁盘读取数据,然后从Socket发送到网络

  传统IO流程:

1

  1、第一次:将磁盘文件,读取到操作系统内核缓冲区;

  2、第二次:将内核缓冲区的数据,copy到application应用程序的buffer;

  3、第三步:将application应用程序buffer中的数据,copy到socket网络发送缓冲区(属于操作系统内核的缓冲区);

  4、第四次:将socket buffer的数据,copy到网卡,由网卡进行网络传输。

  * 传统方式,读取磁盘文件并进行网络发送,经过的四次数据copy是非常繁琐的。实际IO读写,需要进行IO中断,需要CPU响应中断(带来上下文切换),尽管后来引入DMA来接管CPU的中断请求,但四次copy是存在不必要的拷贝的。

  Sendfile 零拷贝

2


  Linux2.1内核开始引入了sendfile函数,用于将文件通过socket传送 ,同时在Linux2.4内核做了重大优化,将零拷贝推到顶峰

  优化后的处理过程如下:

  1. 将文件拷贝到kernel buffer中;

  2. 向socket buffer中追加当前要发生的数据在kernel buffer中的位置和偏移量;

  3. 根据socket buffer中的位置和偏移量直接将kernel buffer的数据copy到网卡设备中;

  * 经过上述过程,数据只经过了2次copy就从磁盘传送出去了。这个才是真正的Zero-Copy(这里的零拷贝是针对kernel来讲的,数据在kernel模式下是Zero-Copy)。

  PageCache 机制

  PageCache 功能是底层操作系统提供的,用于缓存文件的页数据,Kafka 重度依赖它实现大吞吐量和低延迟。 相对于 JVM 的缓存,PageCache没有 GC,减少开销,即使 Kafka 重启 PageCache 还在,回收 PageCache 的代价小,而且只要生产者与消费者的速度相差不大,消费者会直接读取之前生产者写入 Page Cache 的数据,没有磁盘 IO。

  更多关于大数据培训的问题,欢迎咨询千锋教育在线名师。千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

相关推荐

  • linux备份文件命令(linux备份文件命令cp怎么用) linux下备份一个目录下所有文件及目录,应该用什么命令1、dump命令 Linux dump命令用于备份文件系统。dump为备份工具程序,可将目录或整个文件系统备份至指定的设备,或备份成一个大文件
  • linuxuseradd命令详解(linux中useradd和adduser) linux中useradd,usermod命令的使用方法是什么1、通过 usermod -L 用户名锁住密码,这时在root用户下su -l 用户名还是可以进入到系统中,因为root用户su到任意用
  • linux清空日志log命令(linux如何清日志) 在Linux下如何清除系统日志1、每天0点执行 usrnginxdellog.sh 保存后退出,输入命令crontab root就会看到varspoolcron文件夹下看到相应的副本文件root。至
  • linux新建用户命令(linux创建用户命令) linux系统添加用户命令是什么1、Linux如何创建用户打开xshell软件,远程访问您的服务器或虚拟机。Linux添加用户名的命令是:Suduseraded。输入用户文件夹,查看是否已经有一个包
  • linux打开文件夹命令(linux常用命令 打开文件) linux进入管理员模式命令在Linux的命令提示窗口下。输入su命令,然后输入密码就可以进入管理员了。首先打开linux vi,进入到编辑页面中,然后按下“ESC”按键就可以切换到命令模式中了。然
  • linux安装rz(Linux安装maven) Linux下rz命令怎么使用解决方法:本地系统中安装Xshell,用Xshell连接虚拟机Linux,在Xshell中输入命令rz即可上传文件。通过你的描述,将本地的文件上传至linux ,可以通过