大数据-68 Kafka 高级特性 物理存储 日志存储概述

news/2024/11/14 12:52:18/

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(正在更新…)

章节内容

上节我们完成了如下内容:

  • 分区分配策略
  • Range、RoundRobin、Sticky
  • 自定义分区策略实现

在这里插入图片描述

日志存储概述

  • Kafka消息是以主题为单位进行归类,各个主题之间是彼此独立的,互不影响。
  • 每个主题又可以分为一个或多个分区
  • 每个分区各自存在一个记录消息数据的日志文件

我们需要到 Kafka 的 Logs 目录下进行查看:

cd /opt/kafka-logs
pwd
ls

我这里的情况是:
在这里插入图片描述
有一些没展示全的,比如倒数的那几个,是Kafka中现在有的Topic:
在这里插入图片描述

假设我们创建了一个 demo_01 的主题,其存在 个Partition,每个Partition下存在一个[Topic-Partition]命名的消息日志文件。
在分区的日志文件中,可以查看到很多了类型的文件:比如 .index .timestamp .log .snapshot等等
其中文件名一致的合集就叫做:LogSement
在这里插入图片描述

LogSegment

  • 分区日志文件中包含很多的LogSegment
  • Kafka日志追加是顺序写入的
  • LogSegment可以减小日志文件的大小
  • 进行日志删除的时候和数据查找的时候可以快速定位
  • ActiveLogSegment是活跃的日志分段,读写权限,其余的LogSegment只有只读的权限

每个LogSegment都有一个基准偏移量,表示当前LogSegment中第一条消息的Offset。
偏移量是一个64位的长整型数,固定是20位数字,长度未达到,用0进行填补。
可见如下图:
在这里插入图片描述
我服务器上Kafka我的目录情况如下:
在这里插入图片描述

日志与索引

在这里插入图片描述

  • 偏移量索引文件用于记录消息偏移量与物理地址之间的映射关系
  • 时间戳索引文件则根据时间戳查找对应的偏移量。
  • Kafka中的索引文件是以稀疏索引的方式构造消息的索引,并不保证每一个消息在索引文件中都有对应的索引项。
  • 每当写入一定量的消息,偏移量索引文件和时间戳索引分别增加一个偏移量索引项和时间索引项。
  • 通过修改 log.index.interval.bytes 的值,改变索引项的密度。

切分文件

当满足如下几个条件之一,就会触发切分:

  • 当前日志分段文件的大小超过了Broker端的参数 log.segment.bytes 配置的值,默认是1GB
  • 当前日志分段中消息的最大时间戳与当前系统的时间戳相差大于 log.roll.ms 或 log.roll.hour,ms的优先级高于hour,默认是hour,值为168 = 7天
  • 偏移量索引文件或者时间戳索引文件的大小达到Broker参数log.index.size.max.bytes配置的值,默认是10MB。
  • 追加的消息的偏移量与当前日志分段的偏移量之间的差值大于Integer.MAX_VALUE。即要追加的消息的偏移不能转变为相对偏移量。

为什么是 Integer.MAX_VALUE

1024 * 1024 * 1024 = 1073741824
在偏移量索引文件中,每个索引项占用8个字节,并分为两部分。

  • 相对偏移量和物理地址
  • 相对偏移量:表示消息相对于基准偏移量的偏移量,占4个字节。
  • 物理地址:消息在日志分段文件中对应的物理位置,占4个字节。

4个字节刚好对应:Integer.MAX_VALUE,如果大于 Integer.MAX_VALUE,则不能用4个字节进行表示了。

索引切分过程

索引文件会根据 log.index.size.max.bytes 值进行预分配空间,即文件创建的时候就是最大值,当真正的索引文件进行切分的时候,才会将其裁剪到实际数据大小的文件。
这一点是根日志文件有所区别的地方,其意义降低了代码逻辑的复杂性。

索引文件

偏移量索引文件用于记录消息偏移量与物理地址之间的映射关系,时间戳索引文件则根据时间戳查找对应的偏移量。
文件:查看一个topic分区目录下的内容,发现有Log,Index和Timeindex三个文件:

  • log文件名是以文件中第一条message的offset来命名的,实际offset长度是64位,但是这里只使用20位,应付生产是足够的。
  • 一组index+log+timeindex文件的名字是一样的,并且log文件默认写满1G之后,会进行log rolling形成一个新的组合记录消息,这个通过Broker端log.segment.bytes=1073741824指定的。
  • index和timeindex在刚使用时会分配10M的大小,当进行log rolling后,它会修剪为实际的大小。

具体的列表如下:
在这里插入图片描述


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

相关文章

故宫小程序(2024/08/06)

准备工作 WeChatOpenDevTools,开启小程序F12调试mtimproxy 对接口响应拦截修改,方便调试后面的流程 难度 rsa res base64 混用 url https://lotswap.dpm.org.cn/lotsapi/merchant/api/fsyy/calendar?parkId11324&year2024&month08&merch…

【Rust光年纪】提升Rust语言开发效率:错误处理和日志记录库大揭秘

提升Rust应用稳定性与可维护性:6款优秀错误处理与日志记录库全面解析 前言 在Rust语言开发中,错误处理和日志记录是非常重要的方面。为了更好地处理错误和记录应用程序的运行状态,有许多优秀的库可以使用。本文将介绍一些用于Rust语言的错误…

Python爬虫技术 案例集锦

让我们通过几个实际的案例来说明如何使用Python编写网络爬虫。这些案例将涵盖从简单的静态网页爬取到较为复杂的动态网站交互,并且还会涉及到数据清洗、存储和分析的过程。 案例 1: 简单的静态网页爬虫 假设我们需要从一个简单的静态新闻网站上抓取文章标题和链接…

人工智能算法工程师(高级)课程11-自然语言处理之NLP的语言模型-seq2seq模型,seq+注意力与代码详解

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(高级)课程11-自然语言处理之NLP的语言模型-seq2seq模型,seq+注意力,word2vec与代码详解。本课程面向高级人工智能算法工程师,深入讲解自然语言处理(NLP)中的关键语言模型技术,包括seq2seq模型及其增强版加入注意力…

非负数(0和正数) 限制最大值且保留两位小数,在elementpuls表单中正则自定义验证传更多参数

一、结构 <el-form-item label"单价&#xff1a;" prop"price"><el-inputv-model.trim"formData.price"placeholder"请输入"><template #append>(元)</template></el-input></el-form-item>二、…

C4D学习笔记

C4D学习笔记 技巧使用对称面的两边会有问题&#xff0c;很生硬洗面奶瓶盖凹槽洗面奶瓶子尾部接缝 常用功能在一个线创建一个平面在圆面内家一圈线&#xff08;KL循环切割&#xff09;在某个面向内加一圈线某个模式切换&#xff0c;选中所有(按着Ctrl键&#xff09;焊接&#xf…

秒懂C++之deque及反向迭代器

目录 前言 一.deque的常用接口 二.deque的原理 2.1 vector与list的优缺点 2.2 deque的原理 三.反向迭代器 四.全部代码 前言 秒懂C之List-CSDN博客 秒懂C之vector&#xff08;下&#xff09;-CSDN博客 本文后面关于反向迭代器的操作会涉及到前面的文章~ 一.deque的常用接…

Mysql基础知识总结

​⭐️⭐️SQL执行顺序 Sql语句在数据库中的执行流程 &#x1f4e6; 系统&#xff08;客户端&#xff09;访问 MySQL 服务器前&#xff0c;做 的第一件事就是建立 TCP 连接。 Caches & Buffers&#xff1a; 查询缓存组件 SQL Interface: SQL接口 接收用户的SQL命 令&…