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.

Cómo mapear tipos utilizando un archivo de propiedades en Kafka.

Tengo 2 aplicaciones de Spring Boot. Estoy tratando de mapear en el archivo application.properties de tal manera que el Consumidor pueda recibir el mensaje enviado por el productor. Quiero agregar que estoy usando un CustomMessage:

public class CustomMessage {
   private LocalDateTime timestamp;
   private Integer idSensor;
   private Double valor_medicion;
// getters y setters
}

Mi archivo application.properties para el productor:

otras propiedades (uso CloudKarafka)

spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer
spring.kafka.producer.properties.spring.json.type.mapping=customMessage:assignment2.kafka.CustomMessage,customMessage:ro.tuc.ds2020.kafkaconsumer.CustomMessage

Y para el consumidor:

spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
spring.kafka.consumer.properties.spring.json.type.mapping=customMessage:ro.tuc.ds2020.kafkaconsumer.CustomMessage, customMessage:assignment.kafka.CustomMessage

No estoy seguro de cómo se debe hacer el type.mapping. Al hacerlo de la manera presentada, obtengo el siguiente error:

Error al construir el consumidor de Kafka
Error al cargar: assignment.kafka.CustomMessage para customMessage

También falla al construir el productor.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según la información proporcionada, parece que el problema ocurre debido al nombre del paquete incorrecto proporcionado en el archivo application.properties del consumidor.

    En el archivo application.properties del productor se realiza el siguiente mapeo:

    spring.kafka.producer.properties.spring.json.type.mapping=customMessage:assignment2.kafka.CustomMessage,customMessage:ro.tuc.ds2020.kafkaconsumer.CustomMessage

    Aquí, el nombre del paquete para CustomMessage es assignment2.kafka.

    Sin embargo, en el archivo application.properties del consumidor se realiza el siguiente mapeo:

    spring.kafka.consumer.properties.spring.json.type.mapping=customMessage:ro.tuc.ds2020.kafkaconsumer.CustomMessage, customMessage:assignment.kafka.CustomMessage

    Aquí, se menciona el nombre del paquete para CustomMessage como assignment.kafka, lo que no coincide con el nombre real del paquete.

    Para resolver este problema, es necesario actualizar el nombre del paquete mencionado en el archivo application.properties del consumidor al nombre correcto, que es assignment2.kafka.

    Por lo tanto, el archivo application.properties actualizado del consumidor debería verse así:

    spring.kafka.consumer.key-deserializer = org.apache.kafka.common.serialization.StringDeserializer
    spring.kafka.consumer.value-deserializer = org.springframework.kafka.support.serializer.JsonDeserializer
    spring.kafka.consumer.properties.spring.json.type.mapping = customMessage:ro.tuc.ds2020.kafkaconsumer.CustomMessage, customMessage:assignment2.kafka.CustomMessage
    

    Luego de eso, reinicie las aplicaciones y verifique si se resuelve el problema.

Comments are closed.