Kafka 入门到起飞系列 - 磁盘存储 -零拷贝

news2025/2/4 23:44:54

Redis 是 在内存存储数据的,数据读取时不要经过磁盘的IO,只需要内存的操作,这也是redis访问速度快的原因
Kafka背道而驰,Kafka 是在磁盘存储数据的,发送过来的数据交给Kafka后会落盘,消费者读取数据时,也是通过磁盘读取,发送给消费者

Kafka高性能,是多方面协同的结果:

  • 宏观架构
  • 分布式partition存储
  • ISR数据同步
  • 高效利用磁盘/操作系统特性
    零拷贝,不是不需要拷贝,而是减少不必要的拷贝次数,通常是说在IO读写过程中

传统IO: 4次拷贝

用户态:运行中的用户的程序
内核态:通常指操作系统

例如: 当程序发送数据给消费者,如下图:
Kafka

  1. 需要从磁盘去读数据
  2. Kafka需要调用Java的API,API运行在JVM上
  3. JVM再去调用操作系统内核的函数
  4. 内核利用驱动从磁盘去读取数据
  5. 驱动从磁盘读取数据后,将数据拷贝到内核缓冲区
  6. 再将数据从内核缓存区拷贝到应用程序,涉及到内核态到用户态的转换,转换的速度往往比较慢
  7. 再调用操作系统的函数,将数据拷贝到内核缓冲区(Socket网络驱动缓冲区)
  8. 然后将socket buffer的数据拷贝到网络协议栈,由操作系统驱动网卡进行网络传输,这会用到七层网络模型

整体就是读数据拷贝两次,将读到的数据发送出去再拷贝两次

操作系统中非常多的地方用到了缓存,为了提高操作系统处理的性能,操作系统发展了七八十年,已经发展的非常成熟了,操作系统内部大量使用缓存技术,CPU、硬盘等硬件上的缓存,操作系统处理数据是大量、高速去处理的,比如文件的拷贝,网络下载内容,玩游戏等, 速度非常快
应用程序就没有那么快了, 我们写的API是操作数据的,int类型变量占8个字节,long型占16个字节,double类型占16个字节 ,按字节来算的
内核操作是分块的,叫buffer操作 ,一批一批的操作,速度非常快

传统IO 的4次拷贝是存在不必要的拷贝的,
实际上并不需要第二个和第三个数据副本,数据可以直接从读缓冲区传输到socket buffer

Kafka 的零拷贝:

  • 网络数据持久化到磁盘(Producer 到 Broker)
  • 磁盘文件通过网络发送(Broker 到 Consumer)

磁盘数据通过DMA(直接存储器访问),
拷贝到内核态buffer 直接通过DMA拷贝到socket buffer,
无需cpu拷贝
除了减少数据拷贝次数外,整个读数据到网络发送的过程由一个sendFile完成,整个过程只有两次上下文切换,因此也大大提高了性能
Kafka 通过NIO对sendFile的支持,
通过调用FileChannel的transferTo()和transferFrom()方法,实现的零拷贝,零拷贝需要操作系统支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++11】function包装器和bind包装器的简单使用

function function 包装器一些场景下模板的低效性包装器 function 修复问题包装成员函数的注意事项一道例题function包装器的意义 bind 包装器bind 包装器介绍bind 包装器可调整传参顺序bind 包装器可绑定固定参数bind 包装器的意义 C11提供了多个包装器(wrapper,也…

BYOVD!干掉EDR/XDR/AVs进程工具

工具介绍 利用gmer驱动程序有效地禁止使用或杀死EDR和AV,它可以流畅地绕过HVCI;该样本来自 loldrivers:https://www.loldrivers.io/drivers/7ce8fb06-46eb-4f4f-90d5-5518a6561f15/ 关注【Hack分享吧】公众号,回复关键字【230614…

docker安装mariadb,并在宿主机连接docker中启动的mariadb

这篇文章主要介绍怎么在docker中安装一个mariadb数据库,然后在我们的电脑本机上连接虚拟机上docker运行的mariadb数据库。 首先,需要安装一个虚拟机软件,通过虚拟机软件安装一个linux操作系统,本篇文章安装的是ubuntu&#xff0c…

一、基础-3、MySQL卸载

1.、停止MySQL服务 winR 打开运行,输入 services.msc 点击 "确定" 调出系统服务。 2. 卸载MySQL相关组件 打开控制面板 ---> 卸载程序 ---> 卸载MySQL相关所有组件。 3. 删除MySQL安装目录 4. 删除MySQL数据目录 数据存放目录是在 C:\ProgramDat…

No.185# 技术管理框架知识点随记

引言 陆续参加了公司组织的两场关于技术管理的培训,时间一长也快忘的七七八八了。本文以刘建国《执行技术人管理之路》为基础框架,将知识点做了整理,在需要的时候翻翻。本文主要内容有: 技术管理之角色认知技术管理之管理规划技术…

【技能实训】DMS数据挖掘项目-Day11

文章目录 任务12【任务12.1】创建用户信息表【任务12.2】在com.qst.dms.entity下创建用户实体类User,以便封装用户数据【任务12.3】在com.qst.dms.service下创建用户业务类UserService【任务12.4】在项目根目录下创建图片文件夹images,存储dms.png【任务…

了解数据科学中的异常检测

大家好,本文将简要介绍一下异常检测,并指导通过不同的技术来识别异常。 如果你正在处理数据,那么无论是现在还是将来,都可能会遇到一项非常重要的任务 —— 异常检测。它在许多领域中都有很大的应用,如制造业、金融和…

visual studio 2017直接打开文件夹时,选择当前项目或者整个解决方案时,按快捷键查找时显示未找到以下指定文本

有的时候只想要打开一整个文件夹来看里面的代码,平时一般用Qt,但是感觉在打开整个文件夹看代码方面,Qt没有VS方便,于是选择了VS,安装的是VS2017,然后发现有个问题,CtrlF查找时,如果选…

报错:Invalid bound statement (not found): com.web.sysmgr.mapper.UserMapper.login

报错:Invalid bound statement (not found): com.web.sysmgr.mapper.UserMapper.login 原因: 确认是否在扫描Mapper接口时指定了正确的包路径。检查 MapperScan 注解中的包路径是否正确,确保只扫描到需要的Mapper接口。 如果在配置类中去配置…

JQuery 实现点击按钮添加 input 框

前言 用于记录开发中常用到的&#xff0c;快捷开发 需求 比如说&#xff0c;我台设备可以设置一个或多个秘钥&#xff0c;有时候我配置一个秘钥时&#xff0c;就不需要多个输入框&#xff0c;当我想配置多个秘钥时&#xff0c;就需要添加多个输入框。 实现 HTML <div…

Hadoop 之 HDFS 伪集群模式配置与使用(二)

HDFS 配置与使用 一.HDFS配置二.HDFS Shell1.默认配置说明2.shell 命令 三.Java 读写 HDFS1.Java 工程配置2.测试 一.HDFS配置 ## 基于上一篇文章进入 HADOOP_HOME 目录 cd $HADOOP_HOME/etc/hadoop ## 修改文件权限 chown -R root:root /usr/local/hadoop/hadoop-3.3.6/* ## …

JVM 运行流程、类加载、垃圾回收

一、JVM 简介 1、JVM JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java 虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。 常见的虚拟机&#xff1a;JVM、VMwave、Virtual Box。 JVM 和其他两个虚拟机的区别…

Android Profiler 内存分析器使用

Android Profiler是Android Studio的一部分&#xff0c;提供了一个集成的性能分析工具套件&#xff0c;包括内存分析。Android Profiler 工具可提供实时数据&#xff0c;帮助您了解应用的 CPU、内存、网络和电池资源使用情况。 在Android Profiler中&#xff0c;您可以查看内存…

赋能安防“新视界”!智汇云舟亮相中国安防工程商集成商大会

7月14日&#xff0c;备受业界关注的中国安防工程商&#xff08;系统集成商&#xff09;大会暨第67届中国安防新产品、新技术成果展示在上海盛大开幕。来自上海、苏州、南京、无锡等城市的200余位行业领导、嘉宾莅临参会&#xff0c;智汇云舟副总裁陈虹旭受邀出席活动并发表《视…

2、Redis高级特性和应用(发布 订阅、Stream)

Redis高级特性和应用(发布 订阅、Stream) 发布和订阅 Redis提供了基于“发布/订阅”模式的消息机制&#xff0c;此种模式下&#xff0c;消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道( channel)发布消息&#xff0c;订阅该频道的每个客户端都可以收到该消息。 …

【云原生|Docker系列第3篇】Docker镜像的入门实践

欢迎来到Docker入门系列的第三篇博客&#xff01;在前两篇博客中&#xff0c;我们已经了解了什么是Docker以及如何安装和配置它。本篇博客将重点介绍Docker镜像的概念&#xff0c;以及它们之间的关系。我们还将学习如何拉取、创建、管理和分享Docker镜像&#xff0c;这是使用Do…

链表OJ(LeetCode)

文章目录 1.移除链表元素2.反转链表3.链表的中间结点4.倒数第k个结点5.合并两个有序链表6.链表分割7.链表的回文结构8.相交链表9.环形链表10.环形链表Ⅱ1.常规思路2.新型思路【无码】 1.移除链表元素 法一&#xff1a;遍历删除 struct ListNode {int val;struct ListNode* nex…

采集极验4滑块验证码图片数据

在网络安全领域&#xff0c;验证码是一种常见的用于验证用户身份或防止恶意机器人攻击的技术。而极验4滑块验证码作为一种广泛应用的验证码形式&#xff0c;其具有较高的安全性和防御能力。本文将以获取极验4滑块验证码图片数据为主题&#xff0c;介绍相关技术和方法。 一、极…

【Jenkins入门到实战】忽如一夜春风来,千树万树梨花开

自动化运维之Jenkins 前提条件&#xff1a;安装好jdk &#xff08;版本要求11-17&#xff09;并配置好环境变量 一、Jenkins 1、Jenkins是什么 Jenkins是一个开源的持续集成服务&#xff0c;用于实施软件开发和发布流程。它帮助软件开发和运维团队在构建、测试和部署软件上实…

cesium的使用

cesium的使用 cesium的使用创建一个vue项目 vuevitecesium参数的使用常用点位标记删除动态渲染路线借助truf.js的算法进行渲染地块的实现topojson cesium的使用 1.下载或者安装cesium的插件 官方文档 下载下来后创建文件夹整个包引入 2.生成token 新的包应该有默认token如果没…