gpt4 book ai didi

apache-kafka - Spring Kafka MessageListenerContainer

转载 作者:行者123 更新时间:2023-12-03 23:13:33 25 4
gpt4 key购买 nike

我看到spring Kafka代码,我有一些疑问:

  • 如果我们使用 1 个 @kafkaListener 和 2 个主题,那么 spring Kafka 会创建一个 MessageListenerContainer。如果我为每个主题使用单独的 @kafkaListener,那么将创建 2 个 MessageListenerContainer。
  • MessageListenerContainer 是指消费者吗?
  • 如果我在 ConcurrentKafkaListenerContainerFactory 中将并发设置为 4 那么这意味着对于每个 kafkaListener 我打开 4 个与代理的线程?这意味着协调器将它们视为 4 个不同的消费者。
  • 轮询如何与 kafkaListener 一起使用?它是否每次只从经纪人那里获得 1 个 ConsumerRecord?

  • 请帮忙。

    最佳答案

    MessageListenerContainer 有两种实现方式- KafkaMessageListenerContainer (KMLC) 和 ConcurrentMessageListenerContainer (CMLC)。

    CMLC 只是一个或多个 KMLC 的包装器,KMLC 的数量由 concurrency 指定。 .
    @KafkaListener始终使用 CMLC。

    每个 KMLC 得到一个 Consumer (和一个线程)。线程不断poll() s 消费者,指定 pollTimeout .

    主题/分区在 KMLC 中的分布方式取决于

  • 主题有多少个分区
  • 消费者的partition.assignment.strategy属性(property)

  • 如果您有多个主题的分区少于并发,您可能需要一个备用分区分配器,例如循环分配器,否则您将拥有没有分配的空闲容器。
  • 那是正确的;如果您明确希望每个主题使用不同的容器,您可以提供多个 @KafkaListener同一方法的注释。
  • 看我上面的解释。
  • 这是正确的 - 这是与 Kafka 获得并发性的唯一方法(无需添加非常复杂的逻辑来管理偏移量)。
  • 每次轮询返回的记录数取决于许多消费者属性,max.poll.records , fetch.min.bytes , fetch.max.wait.ms .
  • 关于apache-kafka - Spring Kafka MessageListenerContainer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54727660/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com