多个 Broker 和单个 Broker 下,Apache Kafka 如何工作

3

我已开始学习Kafka,在学习过程中遇到了一些与Kafka工作流程相关的疑惑,我将分享这些疑惑并期望得到解答。

(1.) 创建了3个副本因子(replication-factor)和3个分区(partitions)的经纪人(broker)

图片描述

当我将消息推送(push)到经纪人时,消息将被一个经纪人(leader partitions)接收并发送到其副本(replicas)中的其中一个。

传递带有副本的消息使用哪种方法?(方法1、方法2或其他方式)

  1. 方法1

图片描述

  1. 方法2图片描述

(2.) 如果我创建一个具有3个分区(partitions)的经纪人(broker)

图片描述

那么消息将由领导者分区(leader partition)接收并归属于该领导者,那其他2个分区的用途是什么?

2个回答

6

如何使用副本传递消息?

方法一: 如果您将某些消息写入主题的第二个分区,则相同的消息也将在副本主题的第二个分区中进行复制。

如果我创建了一个带有3个分区的代理,那么消息将被接收并属于领导者分区,那么其他2个分区有什么用处?

似乎有关“分区”和“副本”的区别存在困惑。它们是完全不同的两件事。我在另一篇文章中写了一个答案来解释这个问题。关键点是:

“分区”: 将主题中的数据拆分成分区。增加分区的数量将增加应用程序的并行性和吞吐量,因为ConsumerGroup中最多可以有一个消费者读取一个分区。

“副本”: 复制的分区包含领导者完全相同的数据。因此,相同的消息会被多次存储。这样做可确保消息的耐用性,因为相同的消息位于不同的代理上。在代理失败的情况下,Kafka可以切换领导者并向其客户提供复制的消息。 如果您有3个分区,但仅具有1个副本因子,则如果该代理失败,则所有数据(从所有分区)都将丢失。


如果在 broker-1 上的分区 2 收到了一条消息,那么它将会被复制到其他可用的 broker 上的分区 2,同时也会被复制到 broker-1 上的其他分区。它是按照这种方式工作的吗? - Nafaz M N M
1
是的,没错。就像你在方法一中所描述的那样。 - Michael Heil

1

@mike给了一个非常好的答案。对于那些对问题2感到困惑的初学者,这里有一个解释。

只有在你有多个复制时,分区领导者的概念才有意义。领导是跨复制而不是分区的。在问题帖子的可视化中,领导权是横跨经纪人,而不是在一个经纪人的分区之间垂直的。

另一种思考场景2的方法是,每个没有复制的分区都是自己的领导者。你有三个未复制的分区,那么每个分区在一般情况下都是同等重要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接