当前位置: 首页 > 知识库问答 >
问题:

为什么我的Spring-Cloud-Stream配置会创建多个kafka消费者

羊煜
2023-03-14

这不是一个大问题,但我很好奇一些额外的流消费者来自哪里,如果这是一个设置,我可以改变。

我有一个针对本地Kafka经纪人的非常简单的spring cloud stream消费者设置。这是spring配置

spring:
  cloud:
    stream:
      bindings:
        consumer-in-0:
          destination: test-topic
          group: test-group

以及消费者阶层本身:

@Bean
Consumer<Message<String>> consumer() {
 return message -> System.out.println("Got it: " + message.getPayload());
}

但当我运行应用程序时,我可以看到输出中创建了3个消费者。但是,当我在我的本地代理中检查消费者组成员时,它总是只有一个消费者,并且总是创建的第二个消费者(即使用客户id测试组2)

为了清楚起见,我使用的是Spring Boot版本2.3.4。发布和云依赖关系版本Hoxton。SR10。

以下是pom中的依赖项:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
  </dependency>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-stream</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-stream-binder-kafka</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
  </dependency>
<dependencies>

为什么我有3个消费者?为什么第二个是唯一真正倾听Kafka主题的人?

共有1个答案

晋鹤轩
2023-03-14

在启动期间,将创建一个临时使用者,以获取有关为主题配置的分区的信息。

第二个消费者是真正的消费者。

如果您在类路径上有执行器(实际上是微米),KafkaBinderMetrics会创建另一个消费者,以便它可以计算延迟。它实际上并没有消耗任何东西。

 类似资料:
  • 我刚刚开始玩弄《Spring-Cloud-Stream》中的Kafka活页夹。 我配置了一个简单的消费者: 但当我启动应用程序时,我看到在启动日志中创建了三个独立的消费者配置: 我发现这些配置之间唯一不同的是客户机。id。 除此之外,我不知道为什么只有一个消费者有三种配置。 是因为我也在运行吗? 这是我的:

  • 我用的是Spring boot 1.5.9.RELEASE和Spring cloud Edgware。跨微服务发布。 我使用注释绑定了一个消费者。注释将完成我使用事件的其余部分。 出现了一些手动配置主题名称和其他一些配置属性的需求,我希望在应用程序启动时覆盖application.properties中定义的一些消费者属性。 有什么直接的方法吗?

  • Spring cloud stream starter kafka在连接消费者时没有加载配置。以下是我在调试模式下运行控制台时在控制台中看到的配置: 我有以下引导yml文件的配置部分

  • 我正在努力为Kafka-Streams正确配置Spring Cloud Stream,以便使用带有信任存储和密钥存储的SSL。 在我的应用程序中,我有多个流正在运行,所有流的SSL配置应该是相同的。 stream2:Topic2>Topic4 Topic3 stream3:Topic4>Topic5 我使用最新的Spring-Cloud Stream框架和Kafka-Streams以及Avro模型

  • 使用Spring-Cloud-Stream的kafka绑定器,如何配置并发消息消费者(在单个消费者jvm中)?如果我没有理解错的话,在使用kafka时并发使用消息需要分区,但是s-c-s文档指出,要使用分区,您需要通过partitionKeyExpression或PartitionKeyExtractorClass在生成器中指定分区选择。Kafka博士提到循环分区。 s-c-s文档根本没有提到sp

  • 我想配置一个将绑定到多个主题的使用者应用程序(将在一个JVM上运行)。 使用者应用程序中的每个“consume”(假设我有两个主题要侦听)方法将使用@StreamListener注释设置,并链接到特定的主题。 我还将在不同的使用者组中配置每个使用者。 在这样的配置中,使用者应用程序将如何表现? 消息将一个接一个地发送? 我需要在不同的线程中实现每个listner? 这种方法是否有效? Kafka版