持续的消费者群体重新平衡,消费者多于分区

时间:2017-10-21 13:06:03

标签: java apache-kafka kafka-consumer-api

给出以下设置:

  • Kafka v0.11.0.0
  • 3经纪人
  • 2个主题,每个主题有2个分区,复制因子为3
  • 2个消费者群体,每个主题一个
  • 包含消费者的3台服务器

服务器包含两个使用者,每个主题对应一个:

  • 服务器A.
    • group-1-group consumption topic-1
    • 中的consumer-A1
    • group-2-group consume topic-2
    • 中的consumer-A2
  • 服务器B.
    • group-1-group consumption topic-1
    • 中的consumer-B1
    • 消费者-B2在组主题-2组消费主题-2
  • 服务器C.
    • 使用主题-1组消费主题-1
    • 中的consumer-C1
    • group-2-group consumption topic-2
    • 中的consumer-C2

在这种情况下,当我们检查组主题-1组的kafka-consumer-groups.bat的输出时,我们会看到以下内容:

  • consumer-B1被分配给topic-1 partition-1
  • consumer-C1被分配给topic-1 partition-0
  • consumer-A1被分配到无分区

这似乎和我们预期的一样。由于分区计数为2,因此我们只有两个活动使用者。第三个消费者只是空闲。我们可以很好地使用主题中的消息。

接下来,我们关闭服务器B(主动分配给分区的服务器B)。这样做,我们希望topic-1-group进入重新平衡,并期望consumer-A1取代consumer-B1并被分配到一个分区,以便以下情况成立:

  • consumer-A1被分配给topic-1 partition-1
  • consumer-C1被分配给topic-1 partition-0
  • 消费者-B1由于不再有效而被分配给任何内容

然而,我们所看到的是消费者群体主题-1群体进入了似乎并未停止的再平衡状态。由于该组正在重新平衡,心跳似乎也失败了。

从中恢复的唯一方法是关闭另一台服务器,以便主题-1组只有一个消费者。当只有一个消费者时,我们能够成功接收该主题的消息。接下来,如果我们启动其他两个服务器,我们将继续成功接收该主题的消息。

问题

  • 这是有效的使用方案吗?
  • 在这种情况下会发生什么?
  • 消费者会遇到问题吗? (在配置方面,除了设置主题,消费者组等基础知识外,我们使用默认设置...我们正在使用KafkaConsumer.subscribe(收集)而不是手动分配分区)
  • 经纪人/ Zookeeper会出现问题吗?

2 个答案:

答案 0 :(得分:0)

(我会发布一个答案,因为我并不乐意发表评论。这可能是答案'虽然是一个令人不满意的答案:比分区更多的消费者不是支持的配置)。

根据kafka文件: https://kafka.apache.org/documentation.html#introduction  通过在主题中具有并行性概念 - 分区 - ,Kafka能够在消费者流程池中提供订购保证和负载平衡。这是通过将主题中的分区分配给使用者组中的使用者来实现的,以便每个分区仅由该组中的一个使用者使用。通过这样做,我们确保使用者是该分区的唯一读者并按顺序使用数据。由于有许多分区,这仍然可以平衡许多消费者实例的负载。但请注意,消费者组中的消费者实例不能超过分区。

在实践中,额外的消费者在活跃的消费者消失之前一直处于闲置状态,似乎有时处于永久性重新平衡的状态。

此stackoverflow线程(In Apache Kafka why can't there be more consumer instances than partitions?)讨论了这个问题,并讨论了为什么您希望消费者少于分区,但没有说明当您拥有更多消息时会发生什么。其中一个有趣的注释提供了一个原因,您可能需要配置更多(用于故障转移),但没有回复: 现在我们还想确保即使某些消费者实例失败,我们每个消费者实例仍然有一个分区。这样做的逻辑方法是为群组增加更多消费者;虽然一切都很好,但他们不会做任何事情,但是当一些消费者失败时,其中一个会收到该分区。为什么不允许这样做?

答案 1 :(得分:0)

按照Apache kafka合流标准-如果您向一个组添加的使用者数量大于分区数量,那么某些使用者保持空闲状态,因此理想情况下您不应该这样做

相关问题