【问题标题】:Can Kafka consumers consume from all partitionsKafka消费者可以从所有分区消费吗
【发布时间】:2020-01-17 15:48:11
【问题描述】:

我有一个由多个消费者(同一组)使用的多分区主题。我的目标是最大化消费处理,即任何消费者都可以消费来自任何分区的消息。

我知道这看起来是不可能的,因为只有一个消费者可以从一个分区消费。

是否可以使用 REST 代理来实现这一点?例如,轮询所有 Proxy 消费者实例。

谢谢。

【问题讨论】:

  • 任何消费者已经可以从任何分区消费...您受限于主题中的分区数量,您可以为其运行多个应用程序以最大化消费。你真正想解决什么问题?
  • 感谢您的回复。我试图避免一些消费者空闲而主题中仍有消息的情况。这可能吗?
  • 是的。如果你运行的消费者线程多于分区,那么这些额外的线程是空闲的
  • 实际上,当主题中有待处理的消息时,我不希望有任何空闲的消费者。它有点像一个可供所有消费者使用的新消息池。
  • 好的。然后启动与分区一样多的线程或单独的应用程序,仅此而已。我仍然不确定我是否理解您的问题。

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


【解决方案1】:

Kafka 消费者,默认,被配置为从尽可能多的分区消费。如果您在同一个主题上有多个同时使用的消费者,使用相同的消费者组 ID,Kafka 将自动将卷分配给所有这些消费者。这是设计使然,因此您可以通过添加更多消费者来快速扩展消费。

您可以选择指示 kafka 使用者仅从特定分区中使用,甚至包括到一个,但您必须明确地这样做。

【讨论】:

    【解决方案2】:

    最大化消费处理的最佳方式是让一个消费者(同一组)从每个分区读取。

    作为改进措施,您还可以查看:

    • 分区的数量:您可以增加它们以便能够添加更多的消费者并提高吞吐量
    • 如何在分区之间平衡消息,错误的键选择可能导致消息全部进入同一分区

    另外提醒一下,分区和消费者组只允许一个消费者,以避免并发问题。 如果 2 个消费者提交不同的偏移量会发生什么? -> 你最终会读两遍消息或跳过其中一些!

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 2022-06-13
      • 2017-01-04
      • 1970-01-01
      • 2019-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多