【问题标题】:Creating multiple consumers for a Single kafka topic为单个 kafka 主题创建多个消费者
【发布时间】:2020-06-03 15:13:53
【问题描述】:

我有一个 Spring Boot 应用程序。我希望实现一个从 Kafka 主题消费的功能,并且对于每条消费的消息,它都会调用另一个方法,对消息进行一些处理,然后将其存储在数据库中。源 kafka 主题有 12 个分区。我想在同一个消费者组下创建 6 个或 12 个 kafka 消费者。所有消费者都将消费来自 Kafka 的消息并调用该函数。我无法为此做出好的设计。有人能帮我吗 ?

【问题讨论】:

  • 像往常一样,Kafka 消费者将使用来自主题的相同消息并为不同目的处理它们。如果您只是处理一条消息并将其存储到同一个数据库中,我认为您只需要创建一个消费者即可。我是否正确理解了您的帖子?
  • 因此,如果我要创建具有相同消费者组的所有消费者。消费者将在分区之间进行划分。因此,如果我创建 12 个消费者,每个消费者将只从 1 个分区消费。因此,随着消费者数量的增加,我将能够从分区并行消费,并且处理速度会更快。
  • 它调用另一个方法对消息进行一些处理,然后将其存储在数据库中。 - 请为此使用 Kafka Connect。不要使用 Spring 写入数据库

标签: java apache-kafka


【解决方案1】:

我们对具有 4 个分区的主题的需求几乎相同,我们创建了一个具有 2 个成员的消费者组,并为每个成员(消费者的实例)分配了两个分区。 如果您使用的是 spring,您可以使用此参数选择实例将创建多少个成员:

# For Kafka concurrency 
spring.kafka.listener.concurrency=2

如果您使用的是 Kafka 库,则此参数应该在您的使用者的参数中。 请注意不要超过您的可用线程数。

【讨论】:

    【解决方案2】:

    源 kafka 主题有 12 个分区。我想在同一个消费者组下创建 6 或 12 个 kafka 消费者

    您可以设置spring.kafka.listener.concurrency,或者您可以简单地在同一台机器或具有相同配置的多台机器上运行多个Java进程。

    您无需执行任何其他操作,其余部分由 Consumer API 处理

    【讨论】:

      猜你喜欢
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      相关资源
      最近更新 更多