es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

@StreamListener define groupId for kafka: ¿Cómo puedo establecer varios consumidores para el mismo tema?

Estoy utilizando Java y Spring Boot y Kafka en mi aplicación.

Quiero definir varios consumidores para el mismo tema dentro de Kafka.
Ahora, estoy definiendo el ID de grupo dentro de mi archivo de propiedades de la aplicación:

spring.cloud.stream.bindings.myFirstTopic.destination=my-first-topic
spring.cloud.stream.bindings.myFirstTopic.group=my-first-consumer

y en el método estoy utilizando la anotación:

@StreamListener(MyFirstTopicBinding.MY_FIRST_TOPIC)
public void firstConsumer(@Payload MessageDto dto) {}

@StreamListener(MyFirstTopicBinding.MY_FIRST_TOPIC)
public void secondConsumer(@Payload MessageDto dto) {}

Quiero que ambos métodos reciban los mismos mensajes….

¿Cómo puedo hacer esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para definir múltiples consumidores para el mismo tema en Kafka utilizando Java y SpringBoot, simplemente puedes usar el mismo ID de grupo para todos los consumidores en el archivo de propiedades de la aplicación. Por lo tanto, necesitarías cambiar el ID de grupo para el segundo consumidor, de manera que coincida con el primero:

    spring.cloud.stream.bindings.myFirstTopic.destination=my-first-topic
    spring.cloud.stream.bindings.myFirstTopic.group=my-first-consumer
    

    Suponiendo que ambos consumidores están consumiendo mensajes del tema “my-first-topic”, solo necesitas actualizar el valor de group para cada consumidor en tu archivo de propiedades de la siguiente manera:

    spring.cloud.stream.bindings.myFirstTopic.destination=my-first-topic
    spring.cloud.stream.bindings.myFirstTopic.group=my-first-consumer
    
    spring.cloud.stream.bindings.myFirstTopic2.destination=my-first-topic
    spring.cloud.stream.bindings.myFirstTopic2.group=my-first-consumer
    

    En el ejemplo anterior, agregué una vinculación myFirstTopic2, la cual consumirá mensajes del mismo tema “my-first-topic” que el primer consumidor. Ahora tienes dos métodos @StreamListener separados que están consumiendo mensajes del mismo tema de Kafka utilizando el mismo ID de grupo de consumidores. Ambos métodos recibirán los mismos mensajes, y puedes realizar el procesamiento deseado para cada uno de ellos.

Comments are closed.