IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 关于Kafka分区与分段的几个问题 -> 正文阅读

[大数据]关于Kafka分区与分段的几个问题

本文来说下Kafka分区(Partition)与分段(Segment)相关的几个问题


关于Kafka分区

每个分区都是一个有序、不可变的消息序列,后续新来的消息会源源不断地、持续追加到分区的后面,这相当于一种结构化的提交日志(类似于Git的提交日志)。

分区中的每一条消息都会被分配一个连续的id值(即offset),该值用于唯一标识分区中的每一条消息。


分区的重要作用

  • 分区中的消息数据是存储在日志文件中的,而且同一分区中的消息数据是按照发送顺序严格有序的。分区在逻辑上对应一个日志,当生产者将消息写入分区中时,实际上是写到了分区所对应的日志当中。而日志可以看作是一种逻辑上的概念,它对应于磁盘上的一个目录。一个日志文件由多个Segment(段)来构成,每个Segment对应于一个索引文件与一个日志文件。
  • 借助于分区,我们可以实现Kafka Server的水平扩展。对于一台机器来说,无论是物理机还是虚拟机,其运行能力总归是有上限的。当一台机器到达其能力上限时就无法再扩展了,即垂直扩展能力总是受到硬件制约的。通过使用分区,我们可以将一个主题中的消息分散到不同的Kafka Server上(这里需要使用Kafka集群),这样当机器的能力不足时,我们只需要添加机器就可以了,在新的机器上创建新的分区,这样理论上就可以实现无限的水平扩展能力。
  • 分区还可以实现并行处理能力,向一个主题所发送的消息会发送给该主题所拥有的不同的分区中,这样消息就可以实现并行发送与处理,由多个分区来接收所发送的消息。

Segment(段)

一个分区(partition)是由一系列有序、不可变的消息所构成的。一个partition中的消息数量可能会非常多,因此显然不能将所有消息都保存到一个文件当中。因此,类似于log4j的rolling log,当partition中的消息数量增长到一定程度之后,消息文件会进行切割,新的消息会被写到一个新的文件当中,当新的文件增长到一定程度后,新的消息又会被写到另一个新的文件当中,以此类推;这一个个新的数据文件我们就称之为segment(段)。

因此,一个partition在物理上是由一个或者多个segment所构成的。每个segment中则保存了真实的消息数据。


关于partiton与segment之间的关系

每个partition都相当于一个大型文件被分配到多个大小相等的segment数据文件中,每个segment中的消息数量未必相等(这与消息大小有着紧密的关系,不同的消息所占据的磁盘空间显然是不一样的),这个特点使得老的segment文件可以很容易就被删除掉,有助于提升磁盘的利用效率。

每个partition只需要支持顺序读写即可,segment文件的生命周期是由Kafka Server的配置参数所决定的。比如说,server.properties文件中的参数项log.retention.hours=168就表示7天后删除老的消息文件。


关于分区目录中的4个文件的含义与作用

  • 00000000000000000000.index:它是segment文件的索引文件,它与接下来我们要介绍的00000000000000000000.log数据文件是成对出现的。后缀.index就表示这是个索引文件。
  • 00000000000000000000.log:它是segment文件的数据文件,用于存储实际的消息。该文件是二进制格式的。segment文件的命名规则是partition全局的第一个segment从0开始,后续每个segment文件名为上一个segment文件最后一条消息的offset值。没有数字则用0填充。由于这里的主题的消息数量较少,因此只有一个数据文件。
  • 00000000000000000000.timeindex:该文件是一个基于消息日期的索引文件,主要用途是在一些根据日期或是时间来寻找消息的场景下使用,此外在基于时间的日志rolling或是基于时间的日志保留策略等情况下也会使用。实际上,该文件是在Kafka较新的版本中才增加的,老版本Kafka是没有该文件的。它是对*.index文件的一个有益补充。.index文件是基于偏移量的索引文件,而.timeindex则是基于时间戳的索引文件。
  • leader-epoch-checkpoint:是leader的一个缓存文件。实际上,它是与Kafka的HW(High Watermark)与LEO(Log End Offset)相关的一个重要文件。

本文小结

本文详细介绍了Kafka分区与分段相关的知识与内容。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 10:53:03  更:2021-08-02 10:53:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/22 3:06:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码