# Kafka_深入探秘者(6):kafka 物理存储

news2024/7/5 0:07:39

Kafka_深入探秘者(6):kafka 物理存储

一、kafka 存储结构

1、kafka 存储结构概述图

kafka存储结构图.png

2、kafka 存储结构概述

  • 每一个 partion (文件夹)相当于一个巨型文件被平均分配,到多个大小相等 segment(段) 数据文件里。但每一个段 segment file 消息数量不一定相等,这样的特性方便 old segment file 高速被删除。(默认情况下每一个文件大小为1G)。

  • 每一个 partiton 仅仅须要支持顺序读写即可了。segment 文件生命周期由服务端配置参数决定。

3、partiton 中 segment 文件存储结构

  • 1)segment file 组成: 由 2 大部分组成。分别为 index file 和 datafile,此2个文件-一相应,成对出现,后缀”.index”和”.log” 分别表示为 segment 索引文件、数据文件。

  • 2)segment 文件命名规则: partion 全局的第一个 segment 从 0 开始,兴许每一个 segment 文件名称为上一个 segment 文件最后一条消息的 offset 值。

  • 3)数值最大为64位 long 大小。19位数字字符长度,没有数字用0填充。

二、kafka 日志索引

1、akafka 存储 数据文件的分段

Kafka 解决查询效率的手段之一是将数据文件分段,比如有100条 Message,它们的 offset 是从0到99。假设将数据文件分成5段,第一段为0-19,第二段为20-39,以此类推,每段放在一个单独的数据文件里面,数据文件以该段中最小的 offset 命名。这样在查找指定 offset 的 Message 的时候,用二分查找就可以定位到该 Message 在哪个段中。

2、kafka 存储 偏移量索引

数据文件分段使得可以在一个较小的数据文件中查找对应 offset 的 Message 了,但是这依然需要顺序扫描才能找到对应 offset 的 Message。为了进一步提高查找的效率,Kafka 为每个分段后的数据文件建立了索引文件,文件名与
数据文件的名字是一样的,只是文件扩展名为.index。

3、文件索引图

文件索引图.png

4、kafka 文件索引查找概述:

比如: 要查找绝对 offset 为 7 的 Message:

  • 1)首先是用二分查找确定它是在哪个 LogSegment 中,自然是在第一个 Segment 中。打开这个 Segment 的 index 文件,也是用二分查找找到 offset 小于或者等于指定 offset 的索引条目中最大的那个 offset。自然 offset 为6的那个索引是我们要找的,通过索引文件我们知道 offset 为6的 Message在 数据文件中的位置为 9807。

  • 2)打开数据文件,从位置为 9807 的那个地方开始顺序扫描直到找到 offset 为 7 的那条 Message。

  • 3)这套机制是建立在 offset 是有序的。索引文件被映射到内存中,所以查找的速度还是很快的。

  • 4)Kafka 的 Message 存储采用了分区(partition),分段(LogSegment)和稀疏索引这几个手段来达到了高效性。

三、kafka 日志清理、总结

1、kafka 日志删除清理

Kafka 日志管理器允许定制删除策略。目前的策略是删除修改时间在N天之前的日志(按时间删除),也可以使用另外一个策略:保留最后的N GB数据的策略(按大小删除)。为了避免在删除时阻塞读操作,采用了 copy-on-write 形式的实现,删除操作进行时,读取操作的二分查找功能实际是在一个静态的快照副本上进行的,这类似于 java 的 CopyOnWriteArrayList。

2、Kafka 消费日志删除思想:

Kafka 把 topic 中一个 parition 大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完文件,减少磁盘占用。

3、kafka 日志删除清理代码:


# 切换目录
cd /usr/local/kafka/

# 编辑配置文件,配置kafka日志删除清理
vim kafka-01/conf/server.properties 

# 修改以下几项内容:

# 启用删除策路
log.cleanup.policy=delete

# 直接删除,删除后的消息不可恢复。可配置以下两个策略: 清理超过指定时间清理:
log.retention.hours=16

# 超过指定大小后,删除旧的消息:
log.retention.bytes-1073741824

4、kafka 日志压缩

将数据压缩,只保留每个 key 最后一个版本的数据。首先在 broker 的配置中设置 log.cleaner.enable=true 启用 cleaner,这个默认是关闭的。在 Topic 的配置中设置 log.cleanup.policy=compact 启用压缩策略。

kafka日志压缩.png

5、磁盘存储优势

  • 1)kafka 采用消息顺序追加技术 提升存储性能。

Kafka 在设计的时候,采用了文件追加的方式来写入消息,即只能在日志文件的尾部追加新的消息,并且不允许修改已经写入的消息,这种方式属于典型的顺序写入此判断的操作,所以就算是 Kafka 使用磁盘作为存储介质,所能实现的吞吐量也非常可观。

  • 2)Kafka 中大量使用页缓存,这也是 Kafka 实现高吞吐的重要因素之一。

  • 3)除了消息顺序追加,页缓存等技术,Kafka 还使用了零拷贝技术来进一步提升性能。

“零拷贝技术"只用将磁盘文件的数据复制到页面缓存中一次,然后将数据从页面缓存直接发送到网络中(发送给不同的订阅者时,都可以使用同一个页面缓存),避免了重复复制操作。如果有10个消费者,传统方式下,数据复制次数为4*10=40次,而使用“零拷贝技术“只需要1+10=11次,一次为从磁盘复制到页面缓存,10次表示10个消费者各自读取一次页面缓存。

6、kafka 物理存储 总结

  • 1)Kafka 自身的日志格式、日志索引、日志清理等方面的内容,
  • 2)kafka 底层物理存储
  • 3)kafka 文件索引查找

上一节关联链接请点击
# Kafka_深入探秘者(5):kafka 分区

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

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

相关文章

CV每日论文--2024.6.24

1、Whiteboard-of-Thought: Thinking Step-by-Step Across Modalities 中文标题:思维白板:跨模式逐步思考 简介:这段话描述了一种利用思维白板提示来增强大型语言模型在视觉推理任务中的性能的方法。 人类在解决需要视觉思考的问题时,通常会…

DarkGPT:基于GPT-4-200k设计的人工智能OSINT助手

关于DarkGPT DarkGPT是一款功能强大的人工智能安全助手,该工具基于GPT-4-200k设计并实现其功能,可以帮助广大研究人员针对泄露数据库进行安全分析和数据查询相关的OSINT操作。 工具要求 openai1.13.3 requests python-dotenv pydantic1.10.12 工具安装 …

嵌入式通信协议----Zigbee

一、简介 1.概念 Zigbee 是一种广泛用于连接物联网(IoT)设备的无线通信协议。它基于 IEEE 802.15.4 标准,使用低功耗数字无线电来创建个人区域网络(PAN)。Zigbee 网络的特点是数据速率低、功耗低、覆盖范围短&#xf…

Mybatis-plus学习|性能分析插件、条件构造器、代码自动生成器

性能分析插件 我们在平时的开发中,会遇到一些慢sql。测试!druid…. MP也提供性能分析插件,如果超过这个时间就停止运行! 1、导入插件 该插件只允许在开发和测试环境中使用,故先设置开发环境为开发模式 在MP配置类中注册这个插件&#xff0…

微软专家分享 | AIGC开发者沙龙上海站来啦!

为了向技术开发者、业务人员、高校学生、以及个体创业人员等AI技术关注者们提供更深入的行业洞察、技术交流平台和创新思维的启发,AIGC开放社区联合微软Reactor特别组织了一系列城市巡回沙龙分享活动。在上海站中,我们有幸邀请到多位微软专家进行深入的主…

车辆数据的提取、定位和融合 精确车辆定位(其三.一 共十二篇)随机复合

第一篇: System Introduction 第二篇:State of the Art 第三篇:localization 第四篇:Submapping and temporal weighting 第五篇:Mapping of Point-shaped landmark data 第六篇:Clustering of landma…

A股周一走势历史罕见,你知道是为什么吗?

今天的A股,让人历史罕见,你知道是为什么吗?盘面出现2个重要信号,一起来看看: 1、今天大盘低开低走,跌懵了,两市板块全部在等待翻红,这让人历史罕见。 2、盘面出现2个重要信号&#x…

virutalBox安装debian并配置docker环境

下载镜像 https://gemmei.ftp.acc.umu.se/debian-cd/current/amd64/iso-cd/debian-12.5.0-amd64-netinst.iso 虚拟机安装 如何在Virtual Box 上安装Debian系统_virtual box debian iso netinst-CSDN博客 启动命令行模式 如何设置Debian图形启动或命令行界面启动&#xff1…

实验室信息化管理系统LIMS直击实验室管理痛点,提升效率与规范

实验室信息化管理系统LIMS直击实验室管理痛点,提升效率与规范 在实验室管理的实践中,您是否也面临过以下挑战:如何高效协调和管理多个检测项目?如何让管理经验与检测数据有效积累?如何应对项目监控与管理的复杂性&…

C语言数据结构-分析期末选择题考点(一)

昔我往矣,杨柳依依 今我来思,雨雪霏霏 契子✨ 有道是:得选择题者得天下。临近考试,便总结一下数据结构选择题的常考题型吧,以及预测一下考点,一来是为了备考,二来可以水文。祝各位老铁 “挂柯南…

数据结构-线性表的链式表示

目录 前言一、线性表的链式表示和实现1.1 线性表的表示1.2 基本操作的实现1.3 线性表的链式表示的优缺点 总结 前言 本篇文章主要介绍线性表的链式表示 一、线性表的链式表示和实现 1.1 线性表的表示 线性表的链式表示又称为链式存储结构或链式映像 链式存储定义&#xff1…

1.2 DataX 数据同步工具详细教程

DataX 是阿里巴巴开源的一款高效的数据同步工具,旨在实现多种异构数据源之间的高效数据同步。以下是对 DataX 的详细介绍: 架构 DataX 的架构主要包括以下几个核心组件: DataX Core:负责任务调度、插件加载、日志管理等核心功能…

达梦数据库(DM8)替换授权dm.key遇到的错误, lic info is different between dm.key and sysinfo.

1、报错贴图 2、报错日志提示 version info: security lic info is different between dm.key and sysinfo. 原因说明:dm.key授权与服务器的硬件环境不匹配引起的报错,如:cpu、操作系统版本有关。

C++——布隆过滤器

目录 布隆过滤器的提出 布隆过滤器的概念 布隆过滤器的基本原理和特点 布隆过滤器的实现 布隆过滤器的插入 布隆过滤器的查找 布隆过滤器的删除 布隆过滤器的优点 布隆过滤器的缺陷 布隆过滤器使用场景 布隆过滤器的提出 在注册账号设置昵称的时候,为了保证…

word文档怎么加密?电脑文件加密的详细步骤【分享4个】

为了保护Word文档不被未经授权的人员访问或修改,我们通常会采用加密的方式来增加其安全性。那么Word文档怎么加密?电脑文档安全成为了大家所关心的话题。 本文针对不同的情况,本文分享了4种电脑文件加密的方法,每一种加密方法都比…

数据分析必备:一步步教你如何用matplotlib做数据可视化(12)

1、Matplotlib 3D线框图 线框图采用值网格并将其投影到指定的三维表面上,并且可以使得到的三维形式非常容易可视化。plot_wireframe()函数用于此目的 import matplotlib.pyplot as plt import numpy as np import math import seaborn as sns plt.rcParams[font.s…

ArkTS自定义组件

一、自定义组件基本结构 // 定义自定义组件 ButtonCom.ets Component export struct BtnCom{State msg: string "按钮";build() {Row(){Text(this.msg).onClick(() > {this.msg "测试"})}} } // 引入自定义组件 import {BtnCom} from "./Butto…

MySQL——联表查询JoinON详解

Join 对比(7种) 代码演示: -- 查询参加了考试的同学(学号,姓名,科目编号,分数) SELECT * FROM student SELECT * FROM result/* 1. 分析需求:分析查询的字段来自哪些表&…

Ubuntu安装NVIDIA驱动

目录 安装gcc 安装NVIDIA驱动 检查nvidia显卡型号 根据显卡型号下载对应的驱动 安装命令 如何卸载 安装gcc 安装显卡驱动需要使用gcc,输入命令检查是否有gcc gcc --version 如果有版本号弹出,说明已经有gcc环境了,没有的则运行以下…

【高校科研前沿】四川大学刘超研究员为一作在《Geophys. Res. Lett.》发表团队成果:植被形态影响河床泥沙输运

文章简介 论文名称:Plant morphology impacts bedload sediment transport 第一作者及单位:刘超(研究员|四川大学水利水电学院) 通讯作者及单位:Yuqi Shan(四川大学灾后重建与管理研究所) 文…