Kafka 主题

2025年3月17日 | 阅读 3 分钟

在上一节中,我们简单介绍了 Apache Kafka、消息传递系统以及流处理过程。在这里,我们将讨论 Kafka 的基本概念和作用。

主题

通常,主题指的是给一些特定的相互关联的想法起的特定标题或名称。在 Kafka 中,主题一词指的是用于存储和发布特定数据流的类别或常用名称。基本上,Kafka 中的主题类似于数据库中的表,但不包含所有约束。在 Kafka 中,我们可以根据需要创建任意数量的主题。它由其名称标识,这取决于用户的选择。生产者将数据发布到主题,而消费者通过订阅该主题来从主题中读取数据。

分区

一个主题被分成几个部分,这些部分被称为主题的分区。这些分区按顺序分隔。数据内容存储在主题内的分区中。因此,在创建主题时,我们需要指定分区的数量(数量是任意的,以后可以更改)。每条消息都存储在具有增量 ID 的分区中,该 ID 称为其偏移量值。偏移量值的顺序仅在分区内得到保证,而不是跨分区。分区的偏移量是无限的。

注意: 一旦写入分区的数据就永远不能更改。它是不可变的。偏移量值始终保持递增状态,它永远不会返回到空白空间。此外,数据仅在有限的时间内保存在分区中。

让我们看一个例子来理解一个主题及其分区。

Kafka Topics

假设一个主题包含三个分区 0、1 和 2。每个分区都有不同的偏移量编号。数据分布在每个分区的每个偏移量中,其中分区 0 的偏移量 1 中的数据与分区 1 的偏移量 1 中的数据没有任何关系。但是,分区 0 的偏移量 1 中的数据与分区 0 的偏移量 2 中包含的数据相互关联。

代理 (Brokers)

这里,是 Apache Kafka 的作用。

一个 Kafka 集群由一个或多个服务器组成,这些服务器被称为代理或 Kafka 代理。代理是一个容器,它包含多个主题及其多个分区。集群中的代理仅通过一个整数 ID 来标识。Kafka 代理也被称为引导代理,因为与任何一个代理的连接意味着与整个集群的连接。尽管代理不包含所有数据,但集群中的每个代理都知道所有其他代理、分区以及主题。

Kafka Topics

这就是代理在包含 n 个分区的主题的图中所示的样子。

示例:代理和主题

假设一个 Kafka 集群由三个代理组成,即代理 1、代理 2 和代理 3。

Kafka Topics

每个代理都持有一个主题,即主题-x,它有三个分区 0、1 和 2。请记住,并非所有分区都只属于一个代理,它始终分布在每个代理之间(取决于数量)。代理 1 和代理 2 包含另一个主题-y,该主题有两个分区 0 和 1。因此,代理 3 不持有主题-y 的任何数据。还可以得出结论,代理号和分区号之间永远不存在任何关系。