【问题标题】:Kafka Consumer Group during rebalance - timing of switchover and safety重新平衡期间的 Kafka 消费者组 - 切换时间和安全性
【发布时间】:2018-07-27 01:01:23
【问题描述】:

我们要求组成消费者组的集群中所有节点上的给定 Kafka 分区的消息应该始终一次执行一条消息,并且没有重叠。可以容忍它们(稍微)无序地处理,但不能容忍时间重叠。

我们如何在重新平衡期间保持安全 - 例如,假设我们自动扩展我们的消费者,并为同一个消费者组启动一个新消费者 - 然后新消费者将不得不接管同一消费者中现有消费者的分区消费群体。

对于特定的分区 P,假设消费者 c1 之前正在处理分区 P,现在由于重新平衡而不得不放弃,另一个消费者 c2 接管了同一分区 P。

我的问题是-如何保证上述要求。因此,如果消费者 c2 与消费者 c1 为同一分区 P 同时开始处理分区 P 的消息,那将是不好的。

我可以设想一些违反这一点的情况 - 例如,消费者停止向 Zookeeper 发送心跳 - 这会触发重新平衡,但消费者并未真正死亡 - 并继续处理 - 所以让我们排除这种情况 - 我们将不得不忍受它- 不过不太可能。

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    我认为这种用例现在很常见。这可以通过在订阅特定主题时传递ConsumerRebalanceListener 接口的自定义实现来实现

    KafkaConsumer#subscribe(收集主题,ConsumerRebalanceListener 回调)

    ConsumerRebalanceListener.onPartitionsRevoked(Collection<TopicPartition> partitions) 在重新平衡操作开始之前和消费者停止获取数据之后被调用。建议在此回调中提交偏移量,防止重复数据。

    ConsumerRebalanceListener.onPartitionsAssigned(Collection<TopicPartition> partitions) 方法将在分区重新分配完成后且消费者开始获取数据之前调用。您可以在此处加载已分配分区的状态/偏移量。

    【讨论】:

      猜你喜欢
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 2020-08-04
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 2018-05-23
      相关资源
      最近更新 更多