【问题标题】:Springboot kafka consumer not receiving messages after another has already received the messageSpring Boot kafka消费者在另一个已经收到消息之后没有收到消息
【发布时间】:2021-07-06 14:29:10
【问题描述】:

我是 KAFKA 的新手,需要帮助

我有 2 个应用程序(springboot),它们是相同的/仅具有不同端口的副本。 http://localhost:8080/ http://localhost:8081/

他们都是消费者

两人听话题XXX

我还有一个APP,扮演制作人的角色。

每当我向主题 XXX 发送内容时。

其中只有一个会使用该消息,而另一个则不会。

我已经单独测试了两个,如果他们单独听,他们会正常听,但如果他们一起听,只有他们中的一个会听。

我正在使用

         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-kafka</artifactId>
            <version>3.0.0.RELEASE</version>
        </dependency>
spring.cloud.stream.kafka.binder.autoCreateTopics=true
spring.cloud.stream.kafka.binder.headers=type
spring.cloud.stream.kafka.default.consumer.ackEachRecord=true
spring.cloud.stream.kafka.default.consumer.enableDlq=true
spring.cloud.stream.kafka.default.consumer.standardHeaders=both
spring.cloud.stream.kafka.default.consumer.dlqName=api***.d**.api***

我的听众


@StreamListener(target=SomeString.TOPIC, condition = "headers['type']=='***' or headers['type']=='***'")
    public void handle(GenericMessage<String> message) throws BusinessException {
   
***
}

【问题讨论】:

    标签: apache-kafka kafka-consumer-api spring-kafka spring-cloud-stream-binder-kafka


    【解决方案1】:

    Apache Kafka Binder 实现将每个目的地映射到一个 阿帕奇卡夫卡主题。消费者组直接映射到同一个 阿帕奇卡夫卡概念。分区也直接映射到 Apache Kafka 分区也是如此。

    检查 kafka 消费者群体行为 -> https://kafka.apache.org/documentation/#consumerconfigs_group.id

    如果 kafka 消费者只有一个监听消息有相同的 groupId,你应该给他们不同的 groupId

    8080 中的应用程序 -> spring.cloud.stream.bindings.&lt;channelName&gt;.group=consumer-group-1

    8081 中的应用 -> spring.cloud.stream.bindings.&lt;channelName&gt;.group=consumer-group-2

    【讨论】:

    • 是的!你现在就可以了。假设负载平衡会使我的应用程序成倍增加,有没有办法让这个值可变?
    • spring.cloud.stream.bindings..group=${random.uuid}
    猜你喜欢
    • 2018-09-12
    • 2021-06-06
    • 2022-08-13
    • 2020-11-15
    • 1970-01-01
    • 2020-10-16
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多