【Kafka】Kafka为什么快?

news2024/9/25 15:24:10

Kafka之所以快的原因有三个:顺序读写、页缓存、零拷贝。

顺序读写

Kafka依赖磁盘来存储和缓存消息。
在我们的印象中,磁盘的读写速度会比内存的读写速度慢,但这是在随机读写场景下的比较。
实际上,磁盘的顺序读写能力不容小觑,有测试表明磁盘的顺序读写要比随机读写快将近3个数量级,并且比内存的随机读写也要快。
Kafka在设计时采用了文件追加的方式写入消息,即只能在日志尾部追加新的消息,并且不能修改已经写入的消息。

在这里插入图片描述

页缓存

为了优化读写性能,Kafka使用操作系统的页缓存,也就是操作系统自身的内存,而不是JVM内存。
这样的设计,避免了创建对象和GC的性能消耗。
页缓存是操作系统实现的一种主要的磁盘缓存技术,以此用来减少对磁盘 I/O 操作。具体来说,就是磁盘中的数据缓存到内存中,把对磁盘的访问变为对内存的访问。

零拷贝

所谓零拷贝是指直接将数据从磁盘文件复制到网卡设备中,而不经过应用程序。
零拷贝大大提高了应用程序的性能,减少了内核态和用户态的上下文切换。
传统的拷贝技术在整个文件发送过程中需要经过4次拷贝:

  1. 数据从磁盘拷贝到内核的缓冲区中;
  2. 将数据从内核缓冲区拷贝到用户的应用缓冲区;
  3. 数据从应用缓冲区拷贝回内核的socket缓冲区;
  4. 从socket缓冲区拷贝到网卡,进行网络传输;
    零拷贝技术则省去了中间的多次拷贝,将数据从磁盘文件发送到网卡设备中进行网络传输。

传统文件拷贝过程

零拷贝过程

–The End–

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

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

相关文章

Spring IoC注解开发

Component 组件 Controller 控制器 Service 业务 Repository 仓库 其实他们四个本质都一样,只不过另外三个是Component的别名,在不同层使用容易区分 首先需要加入aop依赖,如果你事先加入spring-context依赖,则会关联加入ao…

亚马逊、temu、速卖通、国际站卖家如何利用好测评补单这张王牌?

大家好我是亚马逊测评珑哥。 现在越来越多的跨境电商平台入局,目前跨境电商平台亚马逊、TEMU、ozon、ebay、wish、lazada、敦煌、shopee、速卖通、poshmark、阿里国际站、沃尔玛、newegg、美客多等跨境平台的卖家都在递增,大家都知道,随着各…

javaEE 初阶 — 第一个 servlet 程序

文章目录 Servlet 是什么第一个 Servlet 程序1 创建项目2 引入依赖3 创建目录结构4 代码编写5 打包程序6 部署7 验证 如何使用 tomcat 插件打包及部署1 什么是插件2 插件的安装3 插件的使用4 可能会出现的问题 Servlet 是什么 Servlet 是一种实现 动态页面 的技术,是…

DataX和MongoDB之间的数据导入导出案例

DataX和MongoDB之间的数据导入导出案例 文章目录DataX和MongoDB之间的数据导入导出案例0. 写在前面1. MongoDB前置知识1.1 基础概念详解1.1.1 数据库1.1.2 集合1.1.3 文档(Document)2. DataX 导入导出案例2.1 读取 MongoDB 的数据导入到 HDFS2.1.1 编写配…

模板的分离编译

目录 : 1.分离编译概念 2.模板是不支持分离编译的 3.报链接错误的原因 4.如何解决 ----------------------------------------------------------------------------------------------------------------------- 1.分离编译概念 一个程序由若干个源文件共同实现&a…

java版工程项目管理系统源码 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离 功能清单

ava版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示1…

Eureka单机搭建

Eureka简介 Eureka Spring Cloud Eureka 是Netflix 开发的注册发现组件,本身是一个基于 REST 的服务。提供注册与发现,同时还提供了负载均衡、故障转移等能力 Eureka3个角色 服务中心,服务提供者,服务消费者 Eureka Server&a…

(leetcode C语言)1. 两数之和 9. 回文数

目录 1. 两数之和 思路 代码 9. 回文数 思路 思路1 代码1 思路2 代码2 1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只…

设计模式-创建型模式之建造者模式

5. 建造者模式5.1. 模式动机无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮、方向盘、发送机等各种部件。而对于大多数用户而言,无须知道这些部件的装配细节&#…

linux系统安装和配置网关

Linux 目前国内 Linux 更多的是应用于服务器上,而桌面操作系统更多使用的是 Windows 安装linux虚拟机 网址 VMware下载网址 点击Workstation 16 Pro for Windows下载 安装CentOS centO下载网址 依次点击 7.6.1810/ isos/ x86_64/ CentOS-7-x86_64…

改善供应商关系的八种方法

与供应商保持良好关系的重要性有很多原因。最重要的是,它使每个人的日常工作更加愉快。它还可以为你获得更好的交易,有助于协作并增强商誉。 但是,每个供应商都是不同的,建立牢固的关系可能很棘手。本文将解释企业如何建立并操持…

TypeScript(十二)模块

目录 引言 d.ts声明文件 declare关键字 全局声明 全局声明方式 全局声明一般用作 函数声明 在.ts中使用declare 外部模块(文件模块) 模块关键字module 声明模块 模块声明方式 模块通配符 模块导出 模块嵌套 模块的作用域 模块别名 内部…

机器学习:皮尔逊相关系数——影评相关性分析案例

机器学习:皮尔逊相关系数——影评相关性分析案例 文章目录机器学习:皮尔逊相关系数——影评相关性分析案例:rocket:1、皮尔逊相关系数概念及公式:rocket:2、案例代码部分皮尔逊(pearson)相关系数、 斯皮尔曼(spearman&…

vue2 和 vue3 共存

1.共存的前置条件 1.1 之前全局安装的 vue2 或者 vue3 的脚手架进行卸载,使用 npm命令卸载vue2 npm uninstall vue-cli -g 再使用 vue -V 查看版本出现以下提示为卸载完成 vue3卸载要使用命令npm uninstall vue/cli -g 1.2 安装cnpm 在命令行中输入 npm install -…

java面试题(SpringBoot)

SpringBoot 1.什么是SpringBoot?有什么优点? springboot是spring的子项目,是spring组件的一站式解决方案,简化了使用的难度,简省了配置 优点: 容易上手,提升开发效率内置web容器管理第三方工…

第六章 物理层

数据通信基础 数据通信基本概念 消息与信息;消息是信息的载体 消息:人类能够感知的描述信息:抽象概念,可以理解为消息中所包含的有意义的内容 通信:一点精确或近似地再生另一点的信息信号:传递信息的载体…

提高客户忠诚度的 5 种方法

提高客户忠诚度是成功经营企业的最重要因素之一。忠诚的客户也更有可能向他们的朋友和家人推荐您的业务,从而开辟更多的收入来源。所以您需要将您的战略重点放在建立作为企业主的客户忠诚度上。 提高客户忠诚度的 5种方法 1.优先考虑客户服务 作为企业应该积极主动…

工赋开发者社区 | MES/MOM数据采集系统需求分析和总体设计

随着社会市场需求的不断变化,传统生产车间内的数据采集技术无法跟上市场变化的需求,容易出现数据记录滞后、实时监控困难等问题,造成了车间的生产效率低、产品质量低。在全球信息化的时代背景下,企业内的信息化管理可有效促进经济…

企业管理系统CRM与ERP有何区别

随着企业不断发展壮大,越来越多的企业引进管理系统,助力自身生产管理。目前市面上比较火热的企业管理系统软件有OA、CRM和ERP系统,关于企业OA管理系统,前面我们已经给出了很多介绍。今天主要带大家了解一下企业管理系统CRM和ERP系…

一文弄懂Python中的 if __name__ == __main__

1. 引言 在Python相关代码中,我们经常会遇到如下代码段: # stuff if __name__ "__main__":# do stuff本文将尽可能使用简单的样例来解释这里发生了什么,以及需要使用if __name__"__main__"的情形。请注意,…