kafka向具有相同group.id的所有使用者发送消息

时间:2019-01-14 08:01:14

标签: apache-kafka kafka-consumer-api kafka-producer-api spring-kafka

默认情况下,Kafka将消息从主题发送到所有消费者组。

就我而言,我有一些微服务需要重新调整规模。假设每个实例都有三个实例。

我有一项服务,可提供每个微服务所需的数据。该服务正在发布所需的数据,但问题是发布消息时,每个微型应用程序只有一个实例将被初始化。

我需要找到一种将数据发送到每个微服务的所有实例的方法。这是强制性的元数据。

我不知道如何获得此行为,并且无法更改group.id,因为那样一来,服务将消耗两次相同的消息。

1 个答案:

答案 0 :(得分:0)

与此同时,我找到了答案。

我可以通过在应用程序中定义多个侦听器来获得此信息。每个听众都将订阅其主题,每个听众都将属于不同的group.id

https://docs.spring.io/spring-kafka/reference/htmlsingle/#_annotation_properties

从春季的kafka文档中,我们可以看到kafka侦听器批注将主题和组ID接受为参数。

这样,我可以通过以下配置拥有应用程序I1,I2,I3的三个实例:

T1:
 @KafkaListener(topics = "ORDER_TOPIC", groupId = "order_consumer_group")
 @KafkaListener(topics = "METADATA_TOPIC", groupId = "metadata_topic_uuid1")
T2:
 @KafkaListener(topics = "ORDER_TOPIC", groupId = "order_consumer_group")
 @KafkaListener(topics = "METADATA_TOPIC", groupId = "metadata_topic_uuid2")
T3:
 @KafkaListener(topics = "ORDER_TOPIC", groupId = "order_consumer_group")
 @KafkaListener(topics = "METADATA_TOPIC", groupId = "metadata_topic_uuid3")