Apache Kafka 如何与多个 Broker 和单个 Broker 配合使用

Naf*_*ema 3 apache-kafka kafka-consumer-api kafka-producer-api apache-kafka-streams

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

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

在此输入图像描述

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

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

  1. 方法1

在此输入图像描述

  1. 方法2在此输入图像描述

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

在此输入图像描述

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

mik*_*ike 6

它使用哪种方式传递带有副本的消息?

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

如果我创建一个具有 3 个分区的代理,那么消息将由领导者分区接收,并且它属于领导者,那么其他 2 个分区有什么用呢?

对于“分区”和“副本”之间的区别似乎存在混淆。这是两个完全不同的事情。我在另一篇文章中写过对此的回答。关键点是:

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

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