首页 > 其他分享 >Kafka的零拷贝技术Zero-Copy

Kafka的零拷贝技术Zero-Copy

时间:2023-09-15 16:57:53浏览次数:34  
标签:缓存 Kafka Zero 内核 磁盘 拷贝 Copy 数据 页面

传统的拷贝过程

image

流程步骤:
(1)操作系统将数据从磁盘文件中读取到内核空间的页面缓存;
(2)应用程序将数据从内核空间读入用户空间缓冲区;
(3)应用程序将读到数据写回内核空间并放入socket缓冲区;
(4)操作系统将数据从socket缓冲区复制到网卡接口,此时数据才能通过网络发送。

此过程涉及到4次上下文切换以及4次数据的复制并且有2和3复制步骤都是由cpu完成的,但是这些过程中cpu数据完全没有进行变化,仅仅是磁盘数据复制到了网卡的缓冲区,在这种情况下,如果去掉流程2和3,减少用户空间和内核空间之间的切换,虽然减少了数据交换的次数,但是仍然存在数据多次复制的情况。

零拷贝技术

在DMA技术的基础上,可以实现绝对的零拷贝,DMA技术为(Direct Memory Access,直接存储器访问),不需要依赖cpu的大量中断负载,数据文件可以直接绕过CPU在各个层之间传输,外围设备可以直接通过DMA控制器访问内存。通过零拷贝技术,可以减去没有必要的数据复制操作,同时也减少了上下文切换的次数。
image

可以看出,零拷贝技术只需要将数据从硬盘中将磁盘文件数据复制到页面缓存一次,然后直接将数据才从页面缓存直接发送到网络中,避免了重复复制的操作

页面缓存:存储磁盘数据的内核缓存区域,是操作系统内核中的一部分,用于缓存从磁盘读取的数据,以提高文件系统的性能;由物理内存中的页面构成的,每个页面的大小通常为4KB或更大。当内核从磁盘读取数据时,它将数据存储在页面缓存中。如果其他进程需要访问相同的数据,内核可以直接从页面缓存中读取,而无需再次从磁盘读取数据,从而提高了读取性能。在零拷贝技术中,页面缓存是实现数据传输的一部分。当数据需要从磁盘传输到网络或其他设备时,内核可以直接将页面缓存中的数据发送到目标设备,而无需将数据复制到用户空间或其他中间缓冲区。这样可以减少数据复制的次数和数据传输的延迟,提高数据传输的效率。

标签:缓存,Kafka,Zero,内核,磁盘,拷贝,Copy,数据,页面
From: https://www.cnblogs.com/iamxiaofu/p/17705397.html

相关文章

  • kafka
    Kafka学习笔记_day01适用场景:大数据场景消息队列模式点对点模式消费者主动拉取数据,消息收到以后清除消息发布/订阅模式可以存在多个Topic主题消费者消费完数据以后,不删除数据每个消费者相互独立,都可以消费到数据基础架构内部将一个Topic(主题)分为了多个partition(分区),并配合分区......
  • BeanUtils.copyProperties的 11个坑
    前言我们日常开发中,经常涉及到DO、DTO、VO对象属性拷贝赋值,很容易想到org.springframework.beans.BeanUtils的copyProperties 。它会自动通过反射机制获取源对象和目标对象的属性,并将对应的属性值进行复制。可以减少手动编写属性复制代码的工作量,提高代码的可读性和维护性。但是你......
  • KafKa概述
    概述KafKa就是一个消息队列:作用概况为:解耦、异步、削峰https://juejin.cn/post/6996826368512098317使用消息队列的好处解耦(类似Spring的IOC)允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。可恢复性系统的一部分组件失效时,不会影响到整个......
  • RabbitMQ、RocketMQ和Kafka的不同之处
    RabbitMQ、RocketMQ和Kafka是三种常见的消息队列系统,它们在设计和使用方面有一些不同之处:架构设计:RabbitMQ:RabbitMQ是一个基于AMQP(高级消息队列协议)的开源消息队列系统,采用的是传统的Broker架构模式,其中包括生产者、消费者和中间件(Broker)。RocketMQ:RocketMQ是一个基于分布式......
  • go-zero 生成中间件
    1.API编写 2.生成API 生成后的目录如下 ......
  • go-zero接入GORM并使用
    1.初始化数据库连接 2.建立模型3.配置GORMDB4.在RPC使用 5.启动RPC会看到如下结果 6.进行测试 ......
  • OGG-Postgres实时同步到Kafka
    (一)数据同步信息名称源端名称目标端数据库类型Postgresql12.4组件类型KafkaIP地址20.2.127.23Broker地址20.2.125.52:9092,20.2.127.23:9092,20.2.127.24:9092端口5432端口9092数据库testpdbZookeeperHa......
  • SpringBoot-Learning系列之Kafka整合
    SpringBoot-Learning系列之Kafka整合本系列是一个独立的SpringBoot学习系列,本着WhatWhyHow的思想去整合Java开发领域各种组件。消息系统主要应用场景流量消峰(秒杀抢购)、应用解耦(核心业务与非核心业务之间的解耦)异步处理、顺序处理实时数据传输管道异构语言架构......
  • kafka3.x 简单使用
    ***保证kafka和zookeeper已经在linux上进行了安装,目录需要改为自己的目录 ***kafka2.8之后引入了kraft机制,不用zookeeper也能启动参数介绍 --create创建一个topic --topic[your_topic_name]创建的topic的信息 --describe描述信息 --bootstrap-server[host_url......
  • 【Kafka】ZooKeeper启动失败报错java.net.BindException_ Address already in use_ bi
    问题描述Kafka2.8.1ZooKeeper启动失败。zookeeper-server-start.bat../../config/zookeeper.properties[2023-09-0418:21:49,497]INFObindingtoport0.0.0.0/0.0.0.0:2181(org.apache.zookeeper.server.NIOServerCnxnFactory)[2023-09-0418:21:49,498]ERRORUnexpected......