【问题标题】:Kafka multiple consumers for a partitionKafka 多个消费者用于一个分区
【发布时间】:2015-08-19 06:48:02
【问题描述】:

我有一个将消息写入主题/分区的生产者。为了保持排序,我想使用单个分区,我希望 12 个消费者从这个单个分区读取所有消息(没有消费者组,所有消息都应该发送给所有消费者)。这是可以实现的吗?我阅读了一些论坛,每个分区只有一个消费者可以阅读。

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    您可以使用SimpleConsumer 来实现您所要求的 - 没有消费者组,所有消费者都可以读取单个分区。然而,这种方法意味着您必须自己处理偏移存储和代理故障处理。

    另一种选择是使用具有不同消费者组的高级消费者(您可以为每个消费者分配一个随机 UUID)。这样,您将能够与所有消费者一起使用一个主题/分区,并能够提交偏移量并处理代理中断。

    “只有单个消费者可以使用主题/分区”的规则仅适用于消费者组,例如只有一个消费者 IN GROUP 可以同时消费一个主题/分区。

    【讨论】:

    • 如果我为每个消费者使用唯一的消费者 groupid,我会从单个分区中读取每个客户的所有消息吗?即类似于代码中的东西.. props.put("group.id", KafkaProperties.groupId);
    • 是的,如果你的主题只有一个分区,里面有 1000 条消息,那么所有不同消费组的消费者每个都会读取 1000 条消息。
    • 您能否举一些方法1(处理偏移量和代理失败)和方法2(分配随机uui给每个消费者)的例子?
    • 关于第一种情况,它写得太宽泛了——这在很大程度上取决于你是否应该提交偏移量并在代理失败时保持持久性(例如,当代理死亡时应该发生什么)。一般来说,我建议使用第二种方法,只使用这样的 groupid:props.put("group.id", UUID.randomUUID().toString())
    • 感谢您的 cmets
    【解决方案2】:

    如果您在同一个分区上有多个消费者,那么它会超出您维护排序的初始要求。 虽然,您会订购存储,但消费将是无序的。请确保您对此非常满意。如果是,您可以将每个消费者视为不同的消费者群体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 2022-06-13
      • 2023-03-19
      • 2022-12-08
      相关资源
      最近更新 更多