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

Kafka 日志存储 — 磁盘存储

Kafka 依赖与磁盘来存储和缓存消息,采用文件追加的方式来写入消息。顺序写盘的速度快于随机写内存。

1 磁盘存储

除顺序写入外,Kafka中大量使用了页缓存、零拷贝等技术来进一步提升吞吐性能。

1.1 页缓存

页缓存是操作系统实现的一种磁盘缓存,以此来减少对磁盘I/O的操作。

图 进程读取及写入数据流程

1.1.1 刷盘

将脏页写入到磁盘的过程叫做刷盘。

vm.dirty_background_ratio

当脏页数量达到系统内存的百分之多少之后就会触发刷盘(异步)。默认值为10。

vm.dirty_ratio

当脏页数量达到系统内存的百分之多少之后就立马进行刷盘(同步)。默认值为20。

表 Linux 控制刷盘时机的参数

Kafka同样提供了同步刷盘及间断性强制刷盘的功能,但是不建议使用,刷盘任务应交由操作系统去调配。

1.1.2 未使用进程内的缓存

进程会在其内部缓存处理所需的数据,然后这些数据有可能还缓存在页缓存中,因此同一份数据有可能被缓存了两次。

在Java中,对象的内存开销非常大,通常会是真实数据大小的几倍,空间使用率低下。Java的垃圾回收会随着堆内数据的增多而变得越来越慢。

使用页面缓存可以省去进程内部的缓存消耗,同时通过紧凑的字节码来代替使用对象的方式来节省更多的空间.

此外,即使Kafka服务重启,页缓存还是会保持有效,而进程内的缓存却需要重建。

1.1.3 swap 分区

当物理内存(非磁盘,而是相对于虚拟内存)不够时,Linux会使用磁盘的一部分作为swap分区,将非活跃的进程调入swap分区,来把内存空出来给活跃的进程。

通过vm.swappiness参数来进行调节,其上限为100,表示积极使用swap分区,并把内存上的数据及时地搬运到swap分区中,下限为0,表示任何情况下都不要发生交换。

对于Kafka而言,尽量避免这种内存交换,否则会对它的各方面性能产生很大的负面影响。建议将这个参数值设置为1。

1.2 磁盘I/O流程

图 应用与磁盘I/O操作流程

写操作:用户调用fwrite把数据写入C库标准IObuffer后就返回,写操作通常是异步操作。C库不会立即将数据刷新到磁盘,会将多次小数据量相邻写操作先缓存起来合并,最终调用write一次性写入页缓存。内核的pdflush线程不停检测脏页,判断是否要写到磁盘,如果是,则发起磁盘I/O请求。

读操作:用户调用fread到C库IObuffer中读取数据,如果成功则返回,否则页缓存读取数据,如果成功则返回,否则发起磁盘I/O请求,读取后将数据缓存到页缓存和C库的IObuffer,并返回。读操作是同步操作。

I/O请求:通用块层根据I/O请求构造一个或多个bio(block I/O,阻塞式I/O模型)结构并交给调度层。调度层将bio结构进行排序和合并组织成队列:将一个或多个进程的读操作合并到一起读,将一个或多个进程的写操作合并到一起写,尽可能变随机为顺序,读必须优先满足。

1.2.1 Linux的I/O调度策略

算法

介绍

优缺点

NOOP

No Operation,无操作调度器。采用FIFO(先进先出)策略,按照I/O请求到达的顺序进行处理。在这基础上,会尝试合并相邻(物理地址相邻)的I/O请求:

当一个新的I/O请求到达时,会检查这个请求是否可以和队列种某个请求合并(减少磁盘转动次数)。

优点:低延迟、高吞吐量、简单高效。

缺点:请求饥饿问题、磁盘寻道开销大、缺乏适应性。

CFQ

Completely Fair Queuing,完全公平排队。默认的调度算法。为每个进程单独创建一个队列来管理该进程所产生的请求。根据进程的权重和时间片来调度这些请求。并且将I/O请求按照地址进行排序。

优点:公平性,确保每个进程都能获得公平的I/O带宽。较少了磁盘寻道开销。

缺点:处理大量小I/O请求时有延迟;对优先级高的请求响应不够迅速。

DEADLINE

最后期限。在CFQ基础上,解决了I/O请求“饿死”的情况。除了CFQ本身的I/O队列,还分别为读写提供了FIFO队列。读FIFO队列的最大等待时间为500ms,写FIFO队列的最大等待时间为5s。FIFO队列的优先级要比CFQ队列高。

优点:实时性强、公平性、灵活性。

缺点:复杂度高、资源开销更大

ANTICIPATORY

预期的。上面的算法考虑的焦点在于满足零散I/O请求上,对于连续的I/O请求(比如顺序读),并没有做优化。ANTICIPATORY在DEADLINE的基础上,为每个读I/O都设置了6ms的等待时间窗口,在等待期间OS收到了相邻位置的读请求,则合并请求并处理。

优点:通过预测和合并来减少磁盘的寻道次数和旋转延迟。

缺点:如果非连续读请求较少,则延迟会更长。

表 Linux 的I/O调度策略

请求饥饿:在I/O调度过程种,某些I/O请求由于调度算法的不当处理(无法公平、有效地处理所有请求)而长时间得不到服务,导致请求被“饿死”的现象(长时间等待)。

1.3 零拷贝

将数据直接从磁盘复制到网卡设备中,而不需要经过应用程序。

例如:将磁盘中的图片展示给用户。

正常流程为,将磁盘中的数据复制出来放到内存buf中,然后将这个buf通过套接字(Socket)传输给用户。这个过程中,经历了4次复制。

图 非零拷贝技术的复制过程

图 内核模式下零拷贝技术的复制过程

零拷贝技术通过DMA(Direct Memory Access)技术将文件内容复制到内核模式下的Read Buffer中,然后直接传递到网卡设备。这是在内核模式下实现了零拷贝。

相关文章:

Kafka 日志存储 — 磁盘存储

Kafka 依赖与磁盘来存储和缓存消息,采用文件追加的方式来写入消息。顺序写盘的速度快于随机写内存。 1 磁盘存储 除顺序写入外,Kafka中大量使用了页缓存、零拷贝等技术来进一步提升吞吐性能。 1.1 页缓存 页缓存是操作系统实现的一种磁盘缓存&#x…...

996引擎 - NPC-添加NPC引擎自带形象

996引擎 - NPC-添加NPC引擎自带形象 截图参考添加NPC参考资料截图参考 添加NPC 编辑NPC表:Envir\DATA\cfg_npclist.xls 1.1. 需要临时隐藏NPC时可以在id前加 // 1.2. 如果NPC朝向不对,可以调整dir 列。(按8方向,上是0顺时针数。我这里给的4) 1.3. 形象代码:NPC代码、怪物…...

GL C++显示相机YUV视频数据使用帧缓冲FBO后期处理,实现滤镜功能。

一.前言: GitHub地址:GitHub - wangyongyao1989/WyFFmpeg: 音视频相关基础实现 系列文章: 1. OpenGL Texture C 预览Camera视频; 2. OpenGL Texture C Camera Filter滤镜; 3. OpenGL 自定义SurfaceView Texture C预览Camera视…...

【hot100】刷题记录(7)-除自身数组以外的乘积

题目描述: 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#x…...

解决.NET程序通过网盘传到Linux和macOS不能运行的问题

问题描述:.net程序用U盘传到虚拟机macOS和Linux可以正常运行,但是网盘传过去就不行。 解决方法: 这是文件权限的问题。当你通过U盘将文件传输到虚拟机的macOS和Linux系统时,文件的权限和所有权可能得到了保留或正确设置。但如果…...

练习(复习)

大家好,今天我们来做几道简单的选择题目来巩固一下最近学习的知识,以便我们接下来更好的学习。 这道题比较简单,我们前面学过,在Java中,一个类只能继承一个父类,但是一个父类可以有多个子类,一个…...

Class2(2020):Shell基础(二)——Shell脚本设计基础

本系列博客为MIT的《Missing in CS Class》的课程笔记。 Class2(2020):Shell基础(二)——Shell脚本设计基础 注:若无特殊说明,本文中带有[]的部分均为可选参数。 脚本文件 脚本语言为解释执行,其运行需有解释器,如Python。Shel…...

HBase-2.5.10 伪分布式环境搭建【Mac】

文章目录 前言一、搭建单节点Zookeeper1. 解压zookeeper2. 配置环境变量3. 修改配置文件4. 启动zk 二、搭建伪分布式Hbase1. 解压hbase2. 配置环境变量3. 修改配置4. 启动HBase 前言 搭建hbase伪分布式环境 提示:以下是本篇文章正文内容,下面案例仅供参…...

计算机毕业设计Python+CNN卷积神经网络高考推荐系统 高考分数线预测 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

macos的图标过大,这是因为有自己的设计规范

苹果官方链接:App 图标 | Apple Developer Documentation 这个在官方文档里有说明,并且提供了sketch 和 ps 的模板。 figma还提供了模板: Figma...

2025_1_29 C语言学习中关于指针

1. 指针 指针就是存储的变量的地址,指针变量就是指针的变量。 1.1 空指针 当定义一个指针没有明确指向内容时,就可以将他设置为空指针 int* p NULL;这样对空指针的操作就会使程序崩溃而不会导致出现未定义行为,因为程序崩溃是宏观的&…...

解决ImportError: cannot import name ‘notf‘

解决ImportError: cannot import name ‘notf‘ 报错: 报错代码: from torch.utils.tensorboard import SummaryWriter cannot import name notf from tensorboard.compat 解决方法: pip install numpy1.26.0 测试代码: py…...

HTML<label>标签

例子 三个带标签的单选按钮&#xff1a; <form action"/action_page.php"> <input type"radio" id"html" name"fav_language" value"HTML"> <label for"html">HTML</label><br&…...

shiro学习五:使用springboot整合shiro。在前面学习四的基础上,增加shiro的缓存机制,源码讲解:认证缓存、授权缓存。

文章目录 前言1. 直接上代码最后在讲解1.1 新增的pom依赖1.2 RedisCache.java1.3 RedisCacheManager.java1.4 jwt的三个类1.5 ShiroConfig.java新增Bean 2. 源码讲解。2.1 shiro 缓存的代码流程。2.2 缓存流程2.2.1 认证和授权简述2.2.2 AuthenticatingRealm.getAuthentication…...

大数据Hadoop入门1

目录 相关资料 第一部分 1.课程内容大纲和学习目标 2.数据分析和企业数据分析方向 3.数据分析基本流程步骤 4.大数据时代 5.分布式和集群 6.Linux操作系统概述 7.VMware虚拟机概念与安装 8.centos操作系统的虚拟机导入 9.VMware虚拟机常规使用、快照 第二部分 1.课…...

《智能家居“孤岛危机”:设备孤立如何拖垮系统优化后腿》

在科技飞速发展的今天&#xff0c;智能家居不再是遥不可及的概念&#xff0c;它正逐渐走进千家万户&#xff0c;为我们描绘出舒适便捷的未来生活蓝图。想象一下&#xff0c;下班回家前&#xff0c;你可以通过手机远程开启空调&#xff0c;让室内温度恰到好处&#xff1b;到家时…...

DeepSeek介绍及使用ollama本地化部署DeepSeek-R1大模型

DeepSeek 中文名深度求索人工智能基础技术研究有限公司(简称“深度求索”或“DeepSeek”)&#xff0c;成立于2023年&#xff0c;是一家专注于实现AGI的中国公司。 在本月初推出 DeepSeek-R1后&#xff0c;该公司宣称其在执行数学、编码和自然语言推理等任务时“性能可与OpenAI…...

网络安全攻防实战:从基础防护到高级对抗

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 引言 在信息化时代&#xff0c;网络安全已经成为企业、政府和个人必须重视的问题。从数据泄露到勒索软件攻击&#xff0c;每一次…...

9【如何面对他人学习和生活中的刁难】

我们在学习的过程中&#xff0c;会遇到很多来自于他人的刁难与嘲讽&#xff0c;如果处理不好&#xff0c;这会大大影响我们的心情&#xff0c;从而影响学习的效率 我建议&#xff0c;如果你学习或生活中也遇到了类似的问题&#xff0c;不要去生气&#xff0c;更不要发生冲突&a…...

kafka消费者详细介绍(超级详细)

文章目录 一、Kafka 消费者与消费者组1.1 Kafka 消费者&#xff08;Consumer&#xff09;概述1.1.1 消费者工作流程1.1.2 消费者的关键配置 1.2 Kafka 消费者组&#xff08;Consumer Group&#xff09;概述1.2.1 消费者组的工作原理1.2.2 消费者组的优点1.2.3 消费者组的再均衡…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

C++--string的模拟实现

一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现&#xff0c;其目的是加强对string的底层了解&#xff0c;以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量&#xff0c;…...

门静脉高压——表现

一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构&#xff1a;由肠系膜上静脉和脾静脉汇合构成&#xff0c;是肝脏血液供应的主要来源。淤血后果&#xff1a;门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血&#xff0c;引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...

高保真组件库:开关

一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...

【字节拥抱开源】字节团队开源视频模型 ContentV: 有限算力下的视频生成模型高效训练

本项目提出了ContentV框架&#xff0c;通过三项关键创新高效加速基于DiT的视频生成模型训练&#xff1a; 极简架构设计&#xff0c;最大化复用预训练图像生成模型进行视频合成系统化的多阶段训练策略&#xff0c;利用流匹配技术提升效率经济高效的人类反馈强化学习框架&#x…...