Kafka文件存储原理详解(图文全面总结)

Kafka是大型架构的必备中间件,下面我重点来详解Kafka文件存储原理@mikechen

Kafka文件存储

Apache Kafka 是一个分布式流处理平台,以高吞吐、低延迟和高可靠性著称。

Kafka文件存储原理详解(图文全面总结)-mikechen

Kafka其文件存储机制是实现的核心,Kafka 的存储系统设计围绕分布式、高性能和持久化存储展开。

其核心目标是高效地存储和读取海量消息,同时保证数据的高可用性和一致性。

 

Kafka文件存储原理

Kafka 的存储结构,可以概括为以下几个层次:

Kafka文件存储原理详解(图文全面总结)-mikechen

Topic

Kafka 中的逻辑概念,代表一类消息的集合。

Topic 是消息的逻辑容器,用于组织、和分类具有相同主题的消息流。

例如:可以有名为 “orders” 的 Topic 来存储订单信息,或者名为 “logs” 的 Topic 来存储应用程序日志。

Topic: user-events

在文件系统层面,一个 Topic 本身并不直接对应任何文件或目录,它更像是一个命名空间。

生产者将消息发送到 Topic,消费者从 Topic 订阅消息。

 

Partition

Topic 的物理分片,每个 Topic 被划分为一个或多个 Partition。

Kafka文件存储原理详解(图文全面总结)-mikechen

Partition 是 Kafka 并行处理、和分布式存储的基础。

在文件系统层面,Topic 的每个 Partition 对应 Broker 上的一个目录。

目录的命名通常遵循一定的规则,例如 <topic_name>-<partition_id>

/kafka-logs/user-events-0/
/kafka-logs/user-events-1/
/kafka-logs/user-events-2/

 

每个 Partition 实际上对应一个 有序的日志文件序列。

不同 Partition 的消息是相互独立的,顺序只在 Partition 内保证。

 

 

Segment

在 Kafka 中,Segment 是消息数据持久化到磁盘的最小文件单位。

Kafka 并不将所有消息写入一个巨大的文件,而是将每个 Partition 的日志,按大小、或时间切分为多个 Segment 文件。

如下图所示:

Kafka文件存储原理详解(图文全面总结)-mikechen

Segment是顺序追加的日志文件,默认大小约1GB。

每个Segment包含数据文件(.log)和对应的索引文件(.index.timeindex)。

Topic: user-events
├── Partition 0
│   ├── 00000000000000000000.log
│   ├── 00000000000000000000.index
│   ├── 00000000000000000000.timeindex
文件名称(示例) 说明
00000000000000000000.log 实际消息日志记录(Record)
00000000000000000000.index offset 到物理地址的索引
00000000000000000000.timeindex 时间戳到 offset 的索引

通过将 Topic 划分为 Partition,再将 Partition 的数据存储到多个 Segment 文件中,Kafka 实现了高吞吐量和良好的可管理性。

评论交流
    说说你的看法