我是 KAFKA 的新手,需要帮助
我有 2 个应用程序 (springboot),它们是相同的/仅具有不同端口的副本。 http://本地主机: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 {
***
}
答案 0 :(得分:0)
Apache Kafka Binder 实现将每个目的地映射到一个 Apache Kafka 主题。消费者组直接映射到同一个 Apache Kafka 概念。分区也直接映射到 Apache Kafka 分区也是如此。
检查 kafka 消费者群体行为 -> https://kafka.apache.org/documentation/#consumerconfigs_group.id
如果 kafka 消费者有相同的 groupId 只是一个听消息,你应该给他们不同的 groupId
8080 中的应用 -> spring.cloud.stream.bindings.<channelName>.group=consumer-group-1
8081 中的应用 -> spring.cloud.stream.bindings.<channelName>.group=consumer-group-2