Kafka之日志存储详解

news/2024/9/23 13:53:19/

目录

1. 存储介质的速度常识

  1.1 各个存储介质的速度层级图

1.2 速度层级描述

kafka%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84-toc" style="margin-left:80px;">2. kafka日志文件目录结构

kafka%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E6%8F%8F%E8%BF%B0-toc" style="margin-left:120px;">2.1 kafka日志文件目录描述

2.2 每个主题分区下的文件目录结构

3. 具体日志文件详解

3.1 ".index"文件 

3.2 ”.timeindex“文件

3.3 ".log" 文件

3.4 其他文件

4.回顾与总结


1. 存储介质的速度常识

  1.1 各个存储介质的速度层级图

1.2 速度层级描述

        一个由6块7200r/min的RAID-5阵列组成的磁盘簇的线性(顺序)写入速度可以达到600MB/s,而随机写入速度只有100kb/s,两者性能相差6000倍。

kafka%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84">2. kafka日志文件目录结构

kafka%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E6%8F%8F%E8%BF%B0">2.1 kafka日志文件目录描述

    首先我们需要了解的是Kafka的日志文件目录是日志根目录加上主题和分区来命名的,如以下格式:<topic>-<partition>。

   举个例子,假设由一个主题名为”topic-log“,此主题有4个分区,那么在实际物理存储上表现为”topic-log-0“”topic-log-1“”topic-log-2“”topic-log-3“,如下图所示:

2.2 每个主题分区下的文件目录结构

     如下图所示:

3. 具体日志文件详解

3.1 ".index"文件 

        索引文件,以稀疏索引(sparse index)的方法构造消息的索引,它并不保证每个消息在索引文件中都有对应的索引项。每当写入一定量(由broker端参数log.index.interval.bytes指定,默认值为4096,即为:4kb)的消息时,偏移量索引文件和时间戳索引文件分别增加一个偏移量索引项和时间戳索引项,增大或减小log.index.interval.bytes的值,对应地可以增加或缩小索引项的密度。
       稀疏索引通过MappedByteBuffer将索引文件映射到内存中,以加快索引的查询速度。偏移量索引文件中的偏移量是单调递增的,查询指定偏移量时,使用二分查找法来快速定位偏移量的位置,如果指定的偏移量不在索引文件中,则会返回小于指定偏移量的最大偏移量。时间戳索引文件中的时间戳也保持严格的单调递增,查询指定时间戳时,也根据二分查找法来查找不大于该时间戳的最大偏移量,至于要找到对应的物理文件位置还需要根据偏移量索引文件来进行再次定位。稀疏索引的方式是在磁盘空间、内存空间、查找时间等多方面之间的一个折中。

3.2 ”.timeindex“文件

      基于时间戳与 offset组成的索引文件,与

3.3 ".log" 文件

    真正保存消息数据的日志文件

3.4 其他文件

   clear-offset-checkpoint: 记录已清理未清理的部分

   log-start-offset-checkpoint: 对应logStartOffset,用来标识日志的起始偏移量。各个副本在变动LEO和HW的过程中,logStartOffset也可能随之而动

   meta.properties:  记录分区的元数据。

  recovery-point-offset-checkpoint和replication-offset-checkpoint这两个文件分别对应了LEO和HW。

Kafka会有一个定时任务负责将所有分区的LEO刷写到恢复点文件recovery-point-offset-checkpoint中,定时周期由broker参数log.flush.offset. checkpoint.interval.ms来配置,默认值为60000。还有一个定时任务负责将所有分区的HW刷写到复制点文件replication-offset-checkpoint中,定时周期由broker端参数replica.high.watermark.checkpoint.interval.ms来配置,默认值为5000。

4.回顾与总结

   kafka的日志存储保证的消息的可靠性,日志文件的存储方式及读写方式让kafka更加的高性能。


http://www.ppmy.cn/news/1438289.html

相关文章

Java 执行 JVM Native 方法导致内存碎片

背景&#x1f69e; 由于需要调用到 C/C 的业务对外&#xff0c;使用了 Java 来封装 SDK 进行调用。 事故起因⚡&#xff1a;当 Java 使用 JNI 发生调用 JVM Native 本地方法时&#xff0c;发现内存一直飙升发生 OOM。 操作复现&#x1f50d; 使用 Jmeter 进行压测高并发环境…

isListEqual方法比较

这个方法有改进空间吗&#xff1f; private static boolean isListEqual(List<String> l0, List<String> l1) {if (l0 null && l1 null)return true;if (l0 l1)return true;if (l0 null || l1 null)return false;if (l0.size() ! l1.size())return f…

Redis服务

参考文章&#xff1a; Win.dow.s上安装Redis教程 redis数据库基础篇 Redis 的安装及图形化界面 Redis DeskTop Manager 的安装与使用 下载Redis Redis压缩包 打开Redis 法1&#xff1a; 双击redis-server.exe 应用程序 法2&#xff1a; 进入redis目录下&#xff0c;打cmd…

Entity FrameWork EF 加载方式

1》》 立即加载 2》》 延迟加载 EF 默认加载模式 3》》显示加载

华为机试:夺宝奇兵

夺宝奇兵 | 时间限制&#xff1a;1秒 | 内存限制&#xff1a;262144K 一个3人寻宝团队搜寻沉船成功&#xff0c;获得一笔宝藏&#xff0c;领头人为不起纷争&#xff0c;决定将财宝分成3N份&#xff0c;每次3人从分好的3堆宝藏中依次拿取&#xff0c;领头人第一拿&#xff0c;你…

ubuntu16安装docker及docker-compose

ubuntu16安装docker及docker-compose 一、环境前期准备 检查系统版本 系统版本最好在16及以上&#xff0c;可以确保系统的兼容性 lsb_release -a查看内核版本及系统架构 建议用 x86_64的系统架构&#xff0c;安装是比较顺利的 uname -a32的系统不支持docker&#xff0c;安…

我们真的需要Chinese-LLaMA3本地大模型吗

LLaMA3 8B版本的表现已经能和GPT-4还有Claude3这些大佬一较高下了&#xff01;想象一下70B版本得有多牛&#xff0c;是不是得飞上天和太阳肩并肩了&#xff1f; 不过&#xff0c;原版的LLaMA3主要是用英文世界的语料喂大的&#xff0c;虽然它对中文也能点头哈腰&#xff0c;但因…

EJB和Spring

1. EJB 1.1. 背景 功能日趋复杂的软件&#xff0c;如果把所有的功能实现都放在客户端&#xff0c;不仅代码没有安全性&#xff0c;部署及发布运维都会变的很复杂&#xff0c;所以将软件的功能实现分为客户端和服务端&#xff0c;服务端和客户端之间通过网络调用进行功能实现。…