如何使用 Kafka 中的属性文件映射类型

Glo*_*ria 4 java apache-kafka kafka-consumer-api

我有 2 个 Spring Boot 应用程序。我试图以这样的方式映射 application.properties 文件,以便消费者可以接收生产者发送的消息。我想补充一点,我正在使用 CustomMessage:

public class CustomMessage {

   private LocalDateTime timestamp;
   private Integer sensor_id;
   private Double measurement_value;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)

我的生产者的 application.properties 文件:

# other properties ( I use 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
Run Code Online (Sandbox Code Playgroud)

对于消费者来说:

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
Run Code Online (Sandbox Code Playgroud)

我不确定 type.mapping 应该如何完成。按照这种方式进行,我收到以下错误:

Failed to construct kafka consumer
Failed to load: assignment.kafka.CustomMessage for  customMessage
Run Code Online (Sandbox Code Playgroud)

它也未能构建生产者。

Gar*_*ell 5

该映射是从类到令牌(生产者端)和令牌到类(消费者端)。

您正在将 2 个不同类型映射到同一个标记。

制作人:

customMessage:assignment2.kafka.CustomMessage,
customMessage:ro.tuc.ds2020.kafkaconsumer.CustomMessage
Run Code Online (Sandbox Code Playgroud)

消费者:

customMessage:ro.tuc.ds2020.kafkaconsumer.CustomMessage, 
customMessage:assignment.kafka.CustomMessage
Run Code Online (Sandbox Code Playgroud)

假设制片人的班级是assignment2.kafka.CustomMessage你只需要

customMessage:assignment2.kafka.CustomMessage
Run Code Online (Sandbox Code Playgroud)

在生产者方面和

customMessage:ro.tuc.ds2020.kafkaconsumer.CustomMessage
Run Code Online (Sandbox Code Playgroud)

在消费者方面。