【问题标题】:Kafka distributing messages from a partition among consumersKafka 在消费者之间分配来自分区的消息
【发布时间】:2016-01-21 23:06:37
【问题描述】:

我有一个 Kafka 主题,目前有 3 个分区。我希望我的消费者从同一个分区读取,但每条消息都应该以循环方式发送给不同的消费者。有没有可能做到这一点?

【问题讨论】:

  • 您的意思是消息 1 应该发送给消费者 1,消息 2 发送给消费者 2,消息 3 发送给消费者 3?这是不可能的。
  • 是的,我就是这个意思。

标签: apache-kafka kafka-consumer-api


【解决方案1】:

你所说的违背了分区的目的。分区不是为 kafka 中的简单负载平衡而设计的。如果你真的想要,你有两个选择。

  1. 如果您可以控制生成主题的生产者,请执行简单的 mod 3 哈希分区。因此消息将平均分布在 3 个分区中。现在,您的每个消费者都将从一个分区消费。这实际上意味着每个消费者每三条消息就会被读取一次。这解决了你的问题。
  2. 如果您无法控制生产者,请以正常方式从主题中消费。使用简单的 mod 3 哈希分区编写生产者并将其生成到新主题。再次从该主题中消费。与第一种情况相同。

【讨论】:

    【解决方案2】:

    怎么样,在生产者处,消息是根据某个键进行路由的。可以将消息 1 路由到分区 1,将消息 2 路由到分区 2,将消息 3 路由到分区 3。然后您应该将三个消费者分组为一组。可以让消费者1消费分区1,消费者2消费分区2,消费者3消费分区3。

    顺便说一句,如何实现取决于你使用的是哪个kafka客户端,消息是什么。你应该提供更多细节......

    【讨论】:

      【解决方案3】:

      为此,您必须实现一个消费者组。它随 Kafka 开箱即用。您只需为您的树消费者指定相同的 group.id。

      [edit] 但是,每个消费者将在不同的 Kafka 分区中读取。我认为,如果您只使用 Kafka API,那么在同一分区中读取的同一组的不同消费者是不可能的。

      在文档中查看更多信息:http://kafka.apache.org/documentation.html#intro_consumers

      【讨论】:

      • 这不会让多个消费者消费一个分区
      • 在这种情况下,每个分区都只属于同一消费者组中的一个消费者。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 2017-01-04
      • 1970-01-01
      相关资源
      最近更新 更多