【问题标题】:Does Kafka guard against consumers committing after a network partition?Kafka 是否防止消费者在网络分区后提交?
【发布时间】:2020-10-11 10:35:51
【问题描述】:

假设:

  1. Kakfa 消费者从其分配的分区 P 中读取消息 M
  2. 它与代理进行网络分区
  3. Kafka 检测到这一点并将 P 重新分配给另一台机器上的消费者。
  4. 网络分区已修复,第一个消费者尝试提交消息 M 的偏移量

第 4 步会抛出异常吗?是否有一项检查检测到第一个消费者不再被分配分区 P,因此不应为其提交偏移量?

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    在这种情况下,第一个消费者不能再提交offset。它分配的分区将被撤销,当它再次加入消费者组时,将触发重新平衡过程。所以答案是肯定的。

    【讨论】:

    • 那么当它再次重新加入消费者组时会发生什么,但尝试提交与其先前分配的分区的偏移量? Kafka会抛出异常吗?
    • 是的,它会抛出异常,运行时异常:D.
    【解决方案2】:

    https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol

    给定消费者组的偏移量由称为组协调器的特定代理维护。即,消费者需要向该特定代理发出其偏移提交和获取请求

    由于一个组协调员负责,它知道哪些消费者分配了分区,哪些消费者不再分配分区

    当他们重新加入时,他们的待遇与加入消费组的全新消费者相同。他们将通过重新平衡获得一个或多个分区(这可能与他们上次读取的分区完全不同),consumer_offset 主题将告知他们从哪里开始读取。

    【讨论】:

      猜你喜欢
      • 2020-08-24
      • 1970-01-01
      • 2017-01-04
      • 1970-01-01
      • 2017-10-17
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      相关资源
      最近更新 更多