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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 大数据-68 Kafka 高级特性 物理存储 日志存储概述

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

目前已经更新到了:

Hadoop(已更完)

HDFS(已更完)

MapReduce(已更完)

Hive(已更完)

Flume(已更完)

Sqoop(已更完)

Zookeeper(已更完)

HBase(已更完)

Redis (已更完)

Kafka(正在更新…)

章节内容

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


分区分配策略

Range、RoundRobin、Sticky

自定义分区策略实现

32ae0f665a920b3c0a8a16f7d6ac2929_cd57d9e9d1b349d68b84246861f9c3ee.png

日志存储概述

  • Kafka消息是以主题为单位进行归类,各个主题之间是彼此独立的,互不影响。
  • 每个主题又可以分为一个或多个分区
  • 每个分区各自存在一个记录消息数据的日志文件
  • 我们需要到 Kafka 的 Logs 目录下进行查看:
cd /opt/kafka-logs
pwd
ls

我这里的情况是:

有一些没展示全的,比如倒数的那几个,是Kafka中现在有的Topic

假设我们创建了一个 demo_01 的主题,其存在 个Partition,每个Partition下存在一个[Topic-Partition]命名的消息日志文件。

在分区的日志文件中,可以查看到很多了类型的文件:比如 .index .timestamp .log .snapshot等等

其中文件名一致的合集就叫做:LogSement

假设我们创建了一个 demo_01 的主题,其存在 个Partition,每个Partition下存在一个[Topic-Partition]命名的消息日志文件。

在分区的日志文件中,可以查看到很多了类型的文件:比如 .index .timestamp .log .snapshot等等

b490e902bee6d5c73ebf83caaae5aec1_0a4600984e6a40389b01718b35fa0bb3.png LogSegment

分区日志文件中包含很多的LogSegment

Kafka日志追加是顺序写入的

LogSegment可以减小日志文件的大小

进行日志删除的时候和数据查找的时候可以快速定位

ActiveLogSegment是活跃的日志分段,读写权限,其余的LogSegment只有只读的权限

每个LogSegment都有一个基准偏移量,表示当前LogSegment中第一条消息的Offset。

偏移量是一个64位的长整型数,固定是20位数字,长度未达到,用0进行填补。

可见如下图:

e2b0013b3e4e3f47da37b0d8aa478d25_30f4c2ad9e3947bc9f3d0b4f2fe23ae4.png

我服务器上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后,它会修剪为实际的大小。

具体的列表如下:

目录
相关文章
|
2月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
78 2
|
2月前
|
消息中间件 监控 数据可视化
大数据-79 Kafka 集群模式 集群监控方案 JavaAPI获取集群指标 可视化监控集群方案: jconsole、Kafka Eagle
大数据-79 Kafka 集群模式 集群监控方案 JavaAPI获取集群指标 可视化监控集群方案: jconsole、Kafka Eagle
84 2
|
2月前
|
SQL 大数据 API
大数据-118 - Flink DataSet 基本介绍 核心特性 创建、转换、输出等
大数据-118 - Flink DataSet 基本介绍 核心特性 创建、转换、输出等
66 0
|
2月前
|
消息中间件 关系型数据库 MySQL
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
185 0
|
2月前
|
存储 分布式计算 API
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
97 0
|
2月前
|
消息中间件 分布式计算 NoSQL
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
45 0
|
2月前
|
消息中间件 存储 分布式计算
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
101 0
|
2月前
|
SQL 存储 关系型数据库
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
老架构师尼恩在其读者交流群中分享了关于 MySQL 中 redo log、undo log 和 binlog 的面试题及其答案。这些问题涵盖了事务的 ACID 特性、日志的一致性问题、SQL 语句的执行流程等。尼恩详细解释了这些日志的作用、所在架构层级、日志形式、缓存机制以及写文件方式等内容。他还提供了多个面试题的详细解答,帮助读者系统化地掌握这些知识点,提升面试表现。此外,尼恩还推荐了《尼恩Java面试宝典PDF》和其他技术圣经系列PDF,帮助读者进一步巩固知识,实现“offer自由”。
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
|
2月前
|
消息中间件 存储 druid
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
49 3
|
2月前
|
消息中间件 druid 大数据
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(二)
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(二)
41 2
下一篇
DataWorks