【问题标题】:How to map types using properties file in Kafka如何使用 Kafka 中的属性文件映射类型
【发布时间】:2022-01-09 09:03:57
【问题描述】:

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

public class CustomMessage {

   private LocalDateTime timestamp;
   private Integer sensor_id;
   private Double measurement_value;
// getters and setters
}

我的生产者的 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

对于消费者而言:

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

我不确定 type.mapping 应该如何完成。以这种方式呈现,我得到以下错误:

Failed to construct kafka consumer
Failed to load: assignment.kafka.CustomMessage for  customMessage

也无法构建生产者。

【问题讨论】:

    标签: java apache-kafka kafka-consumer-api


    【解决方案1】:

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

    您将 2 种不同的类型映射到同一个令牌。

    制作人:

    customMessage:assignment2.kafka.CustomMessage,
    customMessage:ro.tuc.ds2020.kafkaconsumer.CustomMessage
    

    消费者:

    customMessage:ro.tuc.ds2020.kafkaconsumer.CustomMessage, 
    customMessage:assignment.kafka.CustomMessage
    

    假设生产者的班级是assignment2.kafka.CustomMessage,你只需要

    customMessage:assignment2.kafka.CustomMessage
    

    在生产者方面和

    customMessage:ro.tuc.ds2020.kafkaconsumer.CustomMessage
    

    在消费者方面。

    【讨论】:

    • 哦,好吧,现在说得通了。所以我按照你说的更正了映射。但现在它给了我另一个错误,它说:The class 'assignment2.kafka.CustomMessage' is not in the trusted packages: [ro.tuc.ds2020.kafkaconsumer, ro.tuc.ds2020.kafkaconsumer.*]. 这发生在消费者方面
    • 我尝试这样做:spring.kafka.consumer.properties.spring.json.trusted.packages=* 信任所有包,但它不起作用。我想是因为我有另一个用于生产者的 spring 应用程序,并且自定义消息就在那里。
    • 如果配置正确,它不应该创建一个assignment2.kafka.CustomMessage,它应该创建一个ro.tuc.ds2020.kafkaconsumer.CustomMessage,所以其他东西是错误的。
    • 也许您在主题中有一些旧记录是在最新配置更改之前发送的?您应该能够通过在消费者端 assignment2.kafka.CustomMessage:ro.tuc.ds2020.kafkaconsumer.CustomMessage 添加第二个映射来使用它们。
    • 我想我确实有一些旧记录发送。我会再试一次
    猜你喜欢
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 2017-04-09
    • 2023-03-25
    相关资源
    最近更新 更多