【问题标题】:How does Apache Kafka Work With Multiple Brokers and Single BrokerApache Kafka 如何与多个代理和单个代理一起工作
【发布时间】:2021-02-20 01:02:10
【问题描述】:

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

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

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

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

  1. 方法 1

  1. 方法-2

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

那么这个消息会被leader partition接收,并且属于leader,那么另外2个partition有什么用呢?

【问题讨论】:

    标签: apache-kafka kafka-consumer-api apache-kafka-streams kafka-producer-api


    【解决方案1】:

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

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

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

    似乎对“分区”和“副本”之间的区别感到困惑。这是两个完全不同的东西。我已经在另一个post 中写了一个关于这个的答案。重点是:

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

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

    【讨论】:

    • 如果消息被 broker-1 上的分区 2 接收,那么它将与其他可用代理上的分区 2 一起复制,并与 broker-1 上的其他分区复制。是这样的吗
    • 是的,没错。正如您在方法 1 中描述的那样。
    【解决方案2】:

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

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

    另一种思考方案 2 的方式是,每个没有复制的分区都是自身的领导者。您有三个非复制分区,那么每个分区通常都同样重要。

    【讨论】:

      猜你喜欢
      • 2013-02-09
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      相关资源
      最近更新 更多