繁体   English   中英

Apache Kafka 如何与多个 Broker 和单个 Broker 协同工作

[英]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个分区有什么用呢?

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM