当前位置: 首页 > news >正文

【大数据学习 | kafka高级部分】kafka的快速读写

1. 追加写

根据以上的部分我们发现存储的方式比较有规划是对于后续查询非常便捷的,但是这样存储是不是会更加消耗存储性能呢?

其实kafka的数据存储是追加形式的,也就是数据在存储到文件中的时候是以追加方式拼接到文件末尾的,这样就非常快速的跳过了文件的检索。

机械磁盘的文件检索需要使用到磁头进行不断扫描数据,如果存储大量的小文件或者存储位置不同的时候需要不停的扫描检索文件的位置,这个过程是非常浪费时间的,但是kafka的数据完全以追加的方式存储到磁盘中的,那么这个时候就完全省去了这样的一个过程,使得机械磁盘的性能和固态的性能相差无几索步骤。

我们可以看到经过测试,机械磁盘的存储性能可以达到600M/s 但是随机读写就比较慢100k/s

所以追加写造就了kafka的高写入性能。

写入的速度非常快,那么读取的性能是如何保证的呢?

首先kafka的数据就是以分区作为单位进行分布式管理的,所以多个机器共同管理,效果更加明显

前文中说过kafka的存储是按照segment切分的,并且存储的数据是带有index索引的,这个速度可以几乎直接定位到相应的检索文件。

并且kafka还实现了零拷贝技术。

2. 零拷贝技术

首先我们可以看到普通的存储在磁盘上的文件要想发送出去的话,需要走以上的步骤

通过内核和用户空间的加载,反反复复经过4次加载和拷贝过程,这个过程是非常消耗性能和io的

其实直白来说,如果数据加载的过程中不走用户缓冲区的话直接以内核加载一次的方式进行传输效率是更加高效的。

所以使用到零拷贝技术,方式就是只将数据从磁盘加载到内存中一次,然后直接从内核空间将数据发送到网卡从而直接传输给消费者端。

零拷贝技术的本质就是怎么减少数据的复制过程,并不是没有数据的复制

这个实现方式就是使用到sendFile的系统函数,它可以直接实现系统内存的映射。

http://www.lryc.cn/news/482591.html

相关文章:

  • 云技术基础
  • 字节序(Byte Order)
  • 融云:社交泛娱乐出海机会尚存,跨境电商异军突起
  • django博客项目实现站内搜索功能
  • 蓝桥杯c++算法学习【1】之枚举与模拟(卡片、回文日期、赢球票、既约分数:::非常典型的比刷例题!!!)
  • Android 延时操作的常用方法
  • AI驱动的轻量级笔记应用Blinko
  • 一文搞懂 UML 类图
  • Zabbix 7 最新版本安装 Rocky Linux 8
  • 使用HTML、CSS和JavaScript创建动态雪人和雪花效果
  • redis bind 127.0.0.1和bind 10.34.56.78的区别
  • 基于点云的 3D 目标检测模型 PointPillars 部署 tensorRT
  • centos查看硬盘资源使用情况命令大全
  • Solon MVC 的 @Mapping 用法说明
  • uni-app表单⑪
  • PyQt5 加载UI界面与资源文件
  • 【MySQL】数据库知识突破:数据类型全解析与详解
  • 使用Golang实现开发中常用的【实例设计模式】
  • 【Java学习】电脑基础操作和编程环境配置
  • AVL树解析
  • 栈和队列(Java)
  • C#设计原则
  • easyfs 简易文件系统
  • 【架构论文-1】面向服务架构(SOA)
  • 刚刚!更新宁德时代社招Verify测评语言理解数字推理SHL题库、网盘资料、高分答案
  • C++笔记---智能指针
  • CentOS 7系统中更改YUM源为阿里云的镜像源
  • Python酷库之旅-第三方库Pandas(206)
  • 3.4CQU数学实验???
  • Linux(CentOS)开放端口/关闭端口