Spring 当两个不同端口的应用程序通过两个不同端口监听同一卡夫卡主题时,如何避免重复消息?

Spring 当两个不同端口的应用程序通过两个不同端口监听同一卡夫卡主题时,如何避免重复消息?,spring,maven,apache-kafka,apache-camel,apache-karaf,Spring,Maven,Apache Kafka,Apache Camel,Apache Karaf,我的spring启动应用程序正在使用来自kafka主题的(apache camel)消息 同一个应用程序(在eclipse上运行的8080和在intellij上运行的9090)在同一台机器上的两个不同端口(8080和9090)上运行,因此两个端口的应用程序侦听同一主题 我如何才能设法向特定端口使用者发送消息 例如,如果我的主题接收到“Hi”消息,它会同时收到我的两个消费者(8080和9090) 我不希望两个消费者都收到相同的消息 “Hi”消息仅由8080应用程序使用,“Hello”消息由9090

我的spring启动应用程序正在使用来自kafka主题的(apache camel)消息

同一个应用程序(在eclipse上运行的8080和在intellij上运行的9090)在同一台机器上的两个不同端口(8080和9090)上运行,因此两个端口的应用程序侦听同一主题

我如何才能设法向特定端口使用者发送消息

例如,如果我的主题接收到“Hi”消息,它会同时收到我的两个消费者(8080和9090)

我不希望两个消费者都收到相同的消息

“Hi”消息仅由8080应用程序使用,“Hello”消息由9090应用程序使用


一次只有一个应用程序有机会接收消息,下一次机会是第二个应用程序。像循环的。您能帮我找到这个问题的解决方案吗?

您需要为每个消费者使用相同的
groupId
。如果消费者使用相同的组id,则只有一个消费者将收到消息

具有相同组id的使用者将创建称为使用者组的内容。一个消费者组中只有一个消费者可以使用来自某个主题的不同消息,其他消费者将无法使用相同的消息

您可以在
application.properties

spring.kafka.consumer.group-id=test_group
或者您可以在
@KafkaListener

@KafkaListener(id = "consumer2", topics = "topic", groupId = "test_group")
public void consumeLog(){

}

不清楚您的主题有多少个分区,但即使只有一个组id,也不能保证将消息逐个传递给不同的使用者(每个使用者的默认轮询大小为500)。谢谢您提供的这些信息,非常有用。我是卡夫卡的新人。再次感谢