【问题标题】:Create concurrent Kafka consumers in Camel-Kafka在 Camel-Kafka 中创建并发 Kafka 消费者
【发布时间】:2020-08-03 23:12:12
【问题描述】:

我正在使用骆驼卡夫卡版本 2.14.3 。 下面是kafka URI:

<from uri="kafka:{brokerlist}?topic={topic-name}&amp;zookeeperHost={zookeeperHost}&amp;zookeeperPort={zookeeperPort}&amp;groupId={groupId-name}&amp;consumerStreams=2" />

请注意,我在 URI 选项中使用了 consumerStream=2。但是当我一次向主题topic-name 发布多条消息(全部到同一个分区)时,kafka 消费者会按顺序接收这些消息。如何并行接收这些消息?

我正在寻找如下解决方案:

<from uri="ibm_bean_name:queue_name?concurrentConsumers=2" /> 

是我用来从 ibm MQ 并发读取的东西

【问题讨论】:

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


    【解决方案1】:

    分区是Kafka的并行单位。每个分区将分配给给定消费者组中的单个消费者。您说您正在生产单个分区。这意味着所有消息都将发送给单个消费者,无论您在组中有多少消费者。如果你想让消息去到不同的消费者,你需要生产到不同的分区。

    【讨论】:

    • 感谢您的回答。这是否意味着,我不能让同一消费者组的多个消费者线程在同一个分区上同时读取?
    • 你不能。这可能会导致乱序消费,这是Kafka的一个重要保证。见stackoverflow.com/questions/25896109/…
    • 感谢您的回复,这回答了我的问题。只是为了确认,使用 consumerStreams 选项具有并行性,我应该将消息发布到不同的分区,对吗?
    【解决方案2】:

    如果你有 N 个分区,那么在同一个消费者组中最多可以有 N 个消费者,每个消费者都从一个分区中读取。当您的消费者少于分区时,一些消费者将从多个分区中读取。此外,如果您的消费者多于分区,那么一些消费者将处于非活动状态并且根本不会收到任何消息。

    如果每个分区有一个消费者,那么某些分区可能会收到更多消息,这就是为什么您的一些消费者可能处于空闲状态而另一些可能仍在处理一些消息的原因。请注意,消息并不总是以循环方式插入到主题分区中,因为具有相同键的消息被放置到同一个分区中。

    【讨论】:

      猜你喜欢
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多