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

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 分区

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

上海计算机学会2020年3月月赛C++丙组T4连乘问题

题目描述 给定 a1​,a2​,⋯,an​,请计算一组乘积,记为P1​,P2​,⋯,Pn​,其中 Pi​ 的定义如下: 也就是说,Pi​ 是 a1​ 到 an​ 的连乘再除去 ai​。由于答案可能比较大,输出每个 Pi​ 模 10000 的余数。…

第六十七:iview的select组件在页面上,下拉数据被遮挡

iview的select组件在页面上,下拉数据被遮挡 加上**:transfer"true"** 代码截图: 官方解说截图:因为默认值是false 所以要改成:transfer“true”

PPT的精细化优化与提升策略

👏👏👏欢迎来到我的博客 ! 亲爱的朋友们,欢迎您们莅临我的博客!这是一个分享知识、交流想法、记录生活的温馨角落。在这里,您可以找到我对世界独特视角的诠释,也可以与我一起探讨各种话题&#…

STL——常用算法(二)

一、常用拷贝和替换算法 1.copy #include <iostream> #include <vector> #include <algorithm> using namespace std; void printVector(int val) {cout << val << " "; } void test01() {vector<int>v1;for (int i 0; i <…

【耐水好】强耐水UV胶水是怎样的?

【耐水好】强耐水UV胶水是怎样的&#xff1f; 强耐水UV胶水是一种特殊的胶水&#xff0c;其设计重点在于其出色的耐水性能。以下是关于强耐水UV胶水的特点&#xff1a; 优异的耐水性能&#xff1a;这种胶水能在水环境下保持稳定的粘接强度&#xff0c;不易被水分解或削弱。因…

利用scalene进行性能分析和优化

​ 上一篇文章&#xff0c;我们详细讲解了Py-Spy这个性能分析和优化工具的使用流程&#xff1b;今天&#xff0c;我们将深入探讨另一个性能分析和优化工具——scalene。 什么是scalene&#xff1f; scalene是一个高精度的Python性能分析工具&#xff0c;可以对CPU和内存使用情…

照片放大工具Topaz Gigapixel AI for Mac v7.1.2

Topaz Gigapixel AI软件是一款相当高效的PC端图像大小调整工具&#xff0c;更是一款能够为摄影师、设计师以及图像处理爱好者带来革命性体验的强大软件。它凭借先进的深度学习技术&#xff0c;打破了传统图像大小调整的限制&#xff0c;实现了真正意义上的无损放大和图像恢复。…

OpenAI 前首席科学家 Ilya Sutskever 成立新人工智能公司

OpenAI 联合创始人之一 Ilya Sutskever 在正式离开 OpenAI 一个月后&#xff0c;成立了一家新公司 Safe Superintelligence Inc. (SSI)。Sutskever 是 OpenAI 的长期首席科学家&#xff0c;他与前 Y Combinator 合伙人 Daniel Gross 以及前 OpenAI 工程师 Daniel Levy 共同创立…

关于Pycharm右下角不显示解释器interpreter的问题解决

关于Pycharm右下角不显示解释器interpreter的问题 在安装新的Pycharm后&#xff0c;发现右下角的 interpreter 的选型消失了&#xff1a; 觉得还挺不习惯的&#xff0c;于是网上找解决办法&#xff0c;无果。 自己摸索了一番后&#xff0c;发现解决办法如下&#xff1a; 勾…

反序列化底层学习

反序列化底层学习 前言 以前也是懒得学&#xff0c;觉得没有必要&#xff0c;学到现在发现好多东西都需要学习java的底层&#xff0c;而且很多漏洞都是通过反序列化底层挖出来的&#xff0c;比如weblogic的一些绕过&#xff0c;我这里也主要是为了学习weblogic来学习的&#…

【图像处理实战】去除光照不均(Python)

这篇文章主要是对参考文章里面实现一种小拓展&#xff1a; 可处理彩色图片&#xff08;通过对 HSV 的 V 通道进行处理&#xff09;本来想将嵌套循环改成矩阵运算的&#xff0c;但是太麻烦了&#xff0c;而且代码也不好理解&#xff0c;所以放弃了。 代码 import cv2 import …

jupyter notebook的markdown语法不起作用

在这个界面编辑&#xff0c;发现markdown你编辑的是什么就是什么&#xff0c;不起作用&#xff0c;然而点一下&#xff1a; 右上角“Notebook转发”&#xff0c;就会单独跳出一个jupyter notebook的界面&#xff0c;此时就会奏效&#xff1a;

考研数学|张宇和武忠祥,强化能不能同时跟?

可以说你跟武老师学明白了&#xff0c;120完全没问题&#xff01;如果追求更高&#xff0c;宇哥的怀抱也想你敞开&#xff01; 学长我21年一战数学83&#xff0c;总分没过线&#xff0c;22年二战143&#xff0c;逆袭上岸211&#xff01;市面上的老师我基本都听过&#xff0c;最…

26.高级特性(上)

目录 一、不安全的Rust二、不安全的超能力2.1 概念2.2 解引用裸指针2.3 调用不安全的函数或方法2.3 创建不安全代码的安全抽象2.4 使用extern函数调用外部代码2.5 访问或修改可变静态变量2.6 实现不安全trait2.7 访问联合体中的字段 三、高级trait3.1 关联类型在trait定义中指定…

Cesium--旋转3dtiles

以下代码来自Cesium 论坛&#xff1a;3DTileset rotation - CesiumJS - Cesium Community 在1.118中测试可行&#xff0c;可直接在Sandcastle中运行&#xff1a; const viewer new Cesium.Viewer("cesiumContainer", {terrain: Cesium.Terrain.fromWorldTerrain()…

模拟面试之外卖点单系统(高频面试题目mark带答案)

昨天跟大家分享一个大家简历中常见的项目-《外卖点单系统》&#xff0c;这是一个很经典的项目&#xff0c;有很多可以考察的知识点和技能点&#xff0c;但大多数同学都是学期项目&#xff0c;没有实际落地&#xff0c;对面试问题准备不充分&#xff0c;回答时抓不到重点&#x…

集群分布式储存

硬件&#xff1a; 存储柜 软件 &#xff1a; software define storage 分布式存储 是一种独特的系统架构由一组能够通过网络连通&#xff0c;为了完成共同任务而协调任务的计算机节点组成分布式是为了使用廉价的普通的计算机完成复杂的计算和存储任务目的就是利用更多的机…

Java-异常:不恰当的异常转换、不充分的日志记录、过度或不当的异常捕获

Java-异常&#xff1a;不恰当的异常转换、不充分的日志记录、过度或不当的异常捕获 Java-异常&#xff1a;不恰当的异常转换、不充分的日志记录、过度或不当的异常捕获一、前期准备二、案例分析1、不恰当的异常转换2、不充分日志记录3、过度或不当的异常捕获 三、正确处理方式1…

常见图像分割模型介绍:FCN、U-Net、SegNet、Mask R-CNN

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

《计算机英语》 Unit 5 Networking 网络

Section A Networking 网络 The need to share information and resources among different computers has led to linked computer systems, called networks, in which computers are connected so that data can be transferred from machine to machine. 不同计算机之间共享…