Kafka - 3.x 文件存储不完全指北

news2024/9/24 4:35:57

文章目录

  • Topic数据的存储机制
  • 演示
    • 基本信息
    • 使用kafka-run-class.sh查看index内容
    • 使用kafka-run-class.sh查看log内容
  • index文件和log文件详解
  • 日志存储参数配置
  • 文件清理策略
    • 综述
    • 清理策略
      • 1)delete策略
      • 2)compact日志策略
  • 高效读写的原因

在这里插入图片描述


Topic数据的存储机制

Kafka是一个分布式流处理平台,它使用发布-订阅模型来处理消息流。Kafka的数据存储机制主要涉及到以下几个关键组件:Topics(主题)、Partitions(分区)和Segments(段)。

  1. Topic(主题):

    • Topic是Kafka中数据流的逻辑通道,用于组织和分类消息。消息发布者将消息发送到特定的主题,而消息订阅者则可以订阅感兴趣的主题以接收消息。
    • 每个主题可以有零个或多个分区,这取决于配置和性能需求。
  2. Partitions(分区):

    • 每个主题可以被划分成一个或多个分区,分区是Kafka中的基本存储单元。
    • 分区允许水平扩展,提高并行性和吞吐量。消息在分区内是有序的,但不保证全局有序。
    • 每个分区在物理上保存在不同的服务器上,以支持数据的分布式存储和处理。
  3. Segments(段):

    • 每个分区的数据实际上被分成多个段,每个段都是一个日志文件,用于持久存储消息。
    • 每个段都有一个固定的大小,一旦达到该大小,就会创建一个新的段。
    • 段的持久性和不断追加新消息的特性使Kafka适合于高吞吐量的数据流处理。

Kafka的数据存储机制的关键优点包括:

  • 高吞吐量:Kafka能够处理大量的消息,因为数据分布在多个分区和段中,允许并行处理。
  • 数据持久性:消息在Kafka中是持久存储的,因此即使消费者没有立即处理它们,数据也不会丢失。
  • 水平扩展:通过增加分区和服务器,可以轻松扩展Kafka的容量和性能。

总之,Kafka的数据存储机制通过主题、分区和段的组织,支持高吞吐量的消息流处理,使其成为一种强大的数据流平台。


演示

基本信息

在这里插入图片描述

使用kafka-run-class.sh查看index内容

[root@localhost artisan-0]# /root/kafka/kafka/bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files   ./00000000000000000000.index
Dumping ./00000000000000000000.index
offset: 0 position: 0
Mismatches in :/tmp/kafka-logs/artisan-0/./00000000000000000000.index
  Index offset: 0, log offset: 3


使用kafka-run-class.sh查看log内容


[root@localhost artisan-0]# /root/kafka/kafka/bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files   ./00000000000000000000.log
Dumping ./00000000000000000000.log
Log starting offset: 0
baseOffset: 0 lastOffset: 3 count: 4 baseSequence: 0 lastSequence: 3 producerId: 2012 producerEpoch: 0 partitionLeaderEpoch: 0 isTransactional: false isControl: false deleteHorizonMs: OptionalLong.empty position: 0 CreateTime: 1698303603739 size: 137 magic: 2 compresscodec: none crc: 3622782875 isvalid: true
baseOffset: 4 lastOffset: 13 count: 10 baseSequence: 0 lastSequence: 9 producerId: 2013 producerEpoch: 0 partitionLeaderEpoch: 0 isTransactional: false isControl: false deleteHorizonMs: OptionalLong.empty position: 137 CreateTime: 1698304010395 size: 241 magic: 2 compresscodec: none crc: 1795667702 isvalid: true
baseOffset: 14 lastOffset: 23 count: 10 baseSequence: 0 lastSequence: 9 producerId: 2014 producerEpoch: 0 partitionLeaderEpoch: 0 isTransactional: false isControl: false deleteHorizonMs: OptionalLong.empty position: 378 CreateTime: 1698304027258 size: 241 magic: 2 compresscodec: none crc: 2868390514 isvalid: true
baseOffset: 24 lastOffset: 28 count: 5 baseSequence: 0 lastSequence: 4 producerId: 2017 producerEpoch: 0 partitionLeaderEpoch: 0 isTransactional: false isControl: false deleteHorizonMs: OptionalLong.empty position: 619 CreateTime: 1698304616155 size: 156 magic: 2 compresscodec: none crc: 1863625421 isvalid: true
baseOffset: 29 lastOffset: 33 count: 5 baseSequence: 0 lastSequence: 4 producerId: 2018 producerEpoch: 0 partitionLeaderEpoch: 0 isTransactional: false isControl: false deleteHorizonMs: OptionalLong.empty position: 775 CreateTime: 1698304624578 size: 156 magic: 2 compresscodec: none crc: 739158864 isvalid: true
baseOffset: 34 lastOffset: 43 count: 10 baseSequence: 0 lastSequence: 9 producerId: 3000 producerEpoch: 0 partitionLeaderEpoch: 0 isTransactional: false isControl: false deleteHorizonMs: OptionalLong.empty position: 931 CreateTime: 1698373784040 size: 181 magic: 2 compresscodec: snappy crc: 3489556255 isvalid: true
[root@localhost artisan-0]#


index文件和log文件详解

在这里插入图片描述


日志存储参数配置

参数描述
log.segment.bytesKafka中log日志是分成一块块存储的,此配置是指log日志划分成块的大小,默认值1G。
log.index.interval.bytes默认4kb,Kafka里每当写入了4kb大小的日志(.log),然后就往index文件里面记录一个索引。稀疏索引。

文件清理策略

综述

Kafka的日志清理策略是为了管理磁盘上的数据,确保系统的性能和可用性。日志清理策略通常与消息日志的保留策略相关。以下是Kafka的日志清理策略的要点:

  1. 日志保留策略:

    • Kafka允许配置保留消息日志的时间(通过log.retention.ms参数)或消息数量(通过log.retention.bytes参数)。
    • 消息日志可以保留一定时间(例如,一周)或一定大小的消息(例如,10 GB),之后将进行清理。
  2. Segments(段):

    • Kafka的消息日志被分成多个段(log segment),每个段包含一定数量的消息。
    • 清理策略针对这些段执行。段的创建和关闭是基于时间和大小的策略。
  3. 日志清理策略类型:

    • Kafka支持两种主要的日志清理策略:删除策略(Delete)和压缩策略(Compact)。
    • 删除策略通过删除旧的日志段来释放磁盘空间。这是默认策略。
    • 压缩策略通过保留消息键相同的最新消息,删除旧版本的消息。这对于维护有状态应用程序非常有用。
  4. 消息日志清理的触发:

    • 清理策略的触发可以由多个因素决定,包括时间(log.retention.ms)、日志大小(log.retention.bytes)、活动日志段的数量和特定主题的配置。
    • 通常,Kafka会周期性地执行清理任务,确保消息日志不会无限增长。
  5. 日志清理的影响:

    • 日志清理可能导致消息丢失,特别是对于删除策略。因此,清理策略的配置需要谨慎考虑,以平衡磁盘空间和消息保留需求。

总之,Kafka的日志清理策略是一个关键组成部分,用于管理消息日志的大小和维护磁盘空间。根据业务需求,可以选择不同的保留策略和清理策略,以满足数据保留、性能和可用性方面的要求。


  1. kafka数据文件保存时间:默认是7天
  2. kafka数据文件保存可通过如下参数修改
    ① log.retention.hours:最低优先级小时, 默认7天(168小时)
    ② log.retention.minutes:分钟
    ③ log.retention.ms:最高优先级毫秒
    ④ log.retention.check.interval.ms:负责设置检查周期,默认5分钟。

清理策略

3.那么一旦超过了设置的时间就会采取清理策略,清理策略有两种:delete和compact

1)delete策略

delete日志删除:将过期数据删除。
配置:log.cleanup.policy=delete
基于时间:默认打开,以segment中所有记录中的最大时间戳作为文件时间戳
基于大小:默认关闭,超过设置的所有日志大小,删除最早的segment。
log.retention.bytes,默认等于-1,表示无穷大。

2)compact日志策略

在这里插入图片描述


高效读写的原因

  1. Kafka本身是分布式集群,可以采用分区技术,并行度高

  2. 读数据采用稀疏索引,可以快速定位要消费的数据

  3. 顺序写磁盘

    Kafka的producer生产数据,要写入到log文件中,写的过程是一直追加到文件末端,为顺序写。官网有数据表明,同样的磁盘,顺序写能到600M/s,而随机写只有100K/s。这与磁盘的机械机构有关,顺序写之所以快,是因为其省去了大量磁头寻址的时间。

在这里插入图片描述

  1. 页缓存+零拷贝技术

在这里插入图片描述

参数描述
log.flush.interval.messages强制页缓存刷写到磁盘的条数,默认是long的最大值,9223372036854775807。一般不建议修改,交给系统自己管理。
log.flush.interval.ms每隔多久,刷数据到磁盘,默认是null。一般不建议修改,交给系统自己管理。

在这里插入图片描述

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

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

相关文章

Glide原理

本文基于Carson整理 1.简介 相比其他几种图片加载框架,Glide性能最好。这得益于其高效的图片缓存策略 其还有多样化的媒体格式加载:如GIF、Video,对于商城首页需展示丰富样式、信息的页面需求来说,也是必不可少的。 2.加载原理…

【数智化人物展】洞隐科技联合创始人兼CEO董志刚:数智化转型的核心是应用新技术打造新型的文化、组织和商业模式...

董志刚 本文由洞隐科技联合创始人兼CEO董志刚投递并参与《2023中国企业数智化转型升级先锋人物》榜单/奖项评选。 数据智能产业创新服务媒体 ——聚焦数智 改变商业 在数字化日益渗透的今天,“释放数字价值,驱动智能转型”已逐渐成为企业转型与创新的关…

Vue插件的使用

一、插件的定义 (一)创建plugin.js文件 文件名可以自定义,但是行业内默认使用plugin作为文件名,该文件和main.js是平级的。 (二)编写对象中的install方法 install方法能够接收一个参数,就是…

【go】两数求和

文章目录 题目代码解法2 代码仓库 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案…

5款在线JavaScript加密混淆工具

5款常用、好用的在线JavaScript加密混淆工具,网址请从截图中查看。 1、jscrambler 2、JShaman 3、javascriptobfuscator 4、freejsobfuscator 5、jjencode

【PyQt】调整子控件的层级以调整绘制的先后顺序

简述 qt中貌似没有直接设置z序的函数,但对应的有其他调整z序的方法: QWidget.raise_():置顶 QWidget.lower():置底 QWidget.stackUnder(wid):置于指定控件之下 其中关键函数是QWidget.stackUnder(wid),利…

phpstorm2022.3.3和xdebug 3 调试代码记录

有鉴于之前使用log日志调试代码,或者var_dump()调试代码太慢了,系统出了问题排查效率低下。最终决定使用xdebug工具提高效率。总结如下: 1. xdebug版本要和phpstorm兼容, 这里使用xdeubug 3.1.6,phpstorm 2022.3.3 (破…

nvm的安装和使用

nvm用途 nvm是用来管理node版本的,安装成功之后可以去切换自己的node版本,就不需要通过安装卸载不同版本的node包 下载与安装 下载地址是https://github.com/coreybutler/nvm-windows/releases 下载nvm-setup.zip,然后安装就可以了 默认路径是C:\Users\wangjingtao\AppData\…

实现成绩发布的高效与便捷

老师们想不想告别繁琐的手动操作,简单省心的发布和查询考试成绩?今天分享的这个方法,可以让学生和家长自主查询成绩,是不是感觉超级方便呢?我来给各位老师讲解一下什么是成绩查询系统吧! 成绩查询系统 成绩…

Reflect 对象的创建目的

目录 前言 逻辑 代码示例 使用 Reflect 操作属性 使用 Reflect 检查属性是否存在 使用 Reflect 创建代理 用法 结论 参考资料 前言 Reflect是JavaScript中的一个内置对象,它提供了一组用于访问对象属性和执行对象方法的方法。Reflect的设计目的是为了在语…

IDEA部署SSM项目mysql数据库MAVEN项目部署教程

如果 SSM 项目是基于 Maven 构建的,则需要配置 maven 环境,否则跳过这一步 步骤一:配置 Maven 第一步:用 IDEA 打开项目,准备配置 maven 环境 ,当然如果本地没有提前配置好 maven,就用 IDEA 默…

多线程面试相关知识点

文章目录 (一) 进程线程和协程的区别创建线程的4种方式1. 继承Thread类2. 实现runnable接口3. 实现Callable接口4. 线程池创建 runnable 和 callable 有什么区别线程的 run()和 start()有什么区别?线程之间的状态变化notify()和 notifyAll()有什么区别?j…

C++之lambda匿名、using、typedef总【全】(二百四十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

如何选择最适合 Android 的 SD 卡恢复软件?

所需要的只是心不在焉地点击了错误的按钮、行为不当的应用程序、或者软件或硬件故障。就这样,您的照片消失了,您的笔记无处可寻,您的文件也消失了。 如何选择最适合 Android 的 SD 卡恢复软件 对别人最好的可能对你不起作用,这取…

【Unity小技巧】可靠的相机抖动及如何同时处理多个震动

每篇一句 围在城里的人想逃出来,站在城外的人想冲进去,婚姻也罢,事业也罢,人生的欲望大都如此。——钱钟书《围城》 前言 相机的抖动我相信大家都不陌生,网上其实已经有非常非常多的教程了,之前我也写过…

2.21每日一题(隐函数求导+变上限积分求导)

1、首先 t 0 时,x ? 或者 y ? 求出来 2、等式两边进行一阶求导,把一阶导函数(隐函数求导)求出来 3、等式两边再次求导,把二阶导函数(隐函数求导)求出来 注意:隐函数求导及变上…

Java 枚举类型与泛型-第13章

Java 枚举类型与泛型-第13章 1.枚举类型 枚举类型是一种特殊的数据类型,用于表示一组有限的命名常量。枚举类型可以帮助您更清晰地定义和管理相关常量,并提供类型安全性。 1.1使用枚举类型设置常量 枚举类型是一种非常方便的方式来设置常量。我们可以…

YUV空间-两张图片颜色匹配(颜色替换)

在做颜色匹配时,从RGB转换到YUV也有一些优势。因为YUV把亮度和色彩分开了,所以可以更容易地调整图像的亮度分布和色彩平衡⁴。而且,YUV也更接近人类感知颜色的方式,所以可以更好地保持图像的自然感。 这个公式是用来做颜色匹配的&…

Node.js 的适用场景

目录 ​编辑 前言 适用场景 1. 实时应用 用法 代码 理解 2. API 服务器 用法 代码示例 理解 3. 微服务架构 用法 代码示例 理解 总结 前言 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它使得 JavaScript 可以脱离浏览器运行在服务器…

如何公网远程访问本地WebSocket服务端

本地websocket服务端暴露至公网访问【cpolar内网穿透】 文章目录 本地websocket服务端暴露至公网访问【cpolar内网穿透】1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功…