Kafka 主题复制

17 Mar 2025 | 阅读 2 分钟

Apache Kafka 是大数据世界中的分布式软件系统。因此,对于这样的系统,需要有已存储数据的副本。在 Kafka 中,每个 broker 都包含某种数据。但是,如果 broker 或机器出现故障怎么办?数据将丢失。作为预防措施,Apache Kafka 实现了复制功能,以确保即使 broker 出现故障,数据也不会丢失。为此,为任何特定 broker 中包含的主题创建了**复制因子**。复制因子是数据在多个 broker 上的副本数。复制因子值应始终大于 1(介于 2 或 3 之间)。这有助于在另一个 broker 中存储数据的副本,用户可以从中访问该副本。

例如,假设我们有一个包含三个 broker 的集群,分别是 Broker 1、Broker 2 和 Broker 3。一个名为 Topic-X 的主题被拆分为分区 0 和分区 1,复制因子为 2。

Kafka Topic Replication

因此,我们可以看到,Topic-x 的分区 0 在 Broker 1 和 Broker 2 中都有其副本。此外,Topic-x 的分区 1 在 Broker 2 和 Broker 3 中有其复制。

当实际数据及其副本都存在时,很容易产生混淆。集群可能会混淆哪个 broker 应该为客户端请求提供服务。为了消除这种混淆,Kafka 执行以下任务

  • 它选择其中一个 broker 的分区作为领导者,其余分区成为其追随者。
  • 允许追随者(broker)同步数据。但是,在**领导者**存在的情况下,任何**追随者**都无权为客户端请求提供服务。这些副本被称为 ISR(同步副本)。因此,Apache Kafka 为数据提供了多个 ISR(同步副本)。

因此,只有领导者才有权为客户端请求提供服务。领导者处理分区的全部读写操作。领导者及其追随者由 zookeeper(稍后讨论)确定。

如果持有分区领导者的 broker 由于任何故障而无法提供数据,其相应的 ISR 副本之一将接管领导权。此后,如果之前的领导者返回,它会尝试再次获得其领导权。

让我们看一个例子来理解领导者及其追随者的概念。

假设一个集群有以下三个 broker 1、2 和 3。存在一个主题 x,它有两个分区,复制因子 = 2。

Kafka Topic Replication

因此,为了消除混淆,Broker 1 下的分区 0 被提供了领导权。因此,它是领导者,Broker 2 下的分区 0 将成为其副本或 ISR。类似地,Broker 2 下的分区 1 是领导者,Broker 3 下的分区 1 是其副本或 ISR。如果 Broker 1 无法提供服务,则带有分区 0 副本的 Broker 2 将成为领导者。


下一主题Kafka 生产者