Apache Kafka 如何与多个代理和单个代理一起工作

How does Apache Kafka Work With Multiple Brokers and Single Broker

我已经开始学习Kafka,在学习过程中,我对Kafka的工作过程遇到了一些困惑,我将与大家分享这些困惑,并期待得到澄清。

(1.) 创建了 3 个具有 3 个复制因子和 3 个分区的代理

当我将消息推送到代理时,消息将被代理中的领导分区之一接收并将其发送到其副本。

用副本传递消息是用什么方式? (方法 1 或方法 2 或其他方式)

  1. 方法一

  1. 方法 2

(2.) 如果我创建一个具有 3 个分区的代理

那么消息会被leader分区接收,属于leader那么其他2个分区有什么用呢?

which way is it used to pass a message with replicas?

这将是 approach-1。如果您将一些消息写入主题的分区 2,则相同的消息将复制到分区 2 中的已复制主题上。

If I create one broker with 3 partitions then the message will be received by the leader partition and it belongs to the leader then what is the use of the other 2 partitions?

“分区”和“副本”之间的区别似乎存在混淆。这是完全不同的两件事。我已经在另一个 中写过关于这个的答案。重点是:

“分区”:主题内的数据被分成多个分区。增加分区数会增加并行度,因此会增加应用程序的吞吐量,因为您最多可以让 ConsumerGroup 中的一个消费者读取一个分区。

"replication": 复制的分区包含与领导者完全相同的数据。所以同一条消息被多次存储。这确保了持久性,因为相同的消息位于不同的代理上。如果代理发生故障,Kafka 可以切换领导者并将复制的消息提供给其客户端。 如果你有 3 个分区,但只有 1 个复制因子,那么如果那个代理出现故障,你所有的数据(来自所有分区)都将消失。

@mike 回答的很好。对于对问题2感到困惑的初学者,这里做一个解释。

partition leader 的概念只有在您有多个复制时才有意义。领导是跨复制,而不是分区。在问题 post 的可视化中,leadership 水平跨代理,而不是垂直跨一个代理中的分区。

考虑场景 2 的另一种方式是,每个没有复制的分区都是它自己的领导者。你有三个非复制分区,那么每个分区一般都同等重要。