【问题标题】:Configuring custom Kafka Consumer Deserializer in application.properties file. [spring boot]在 application.properties 文件中配置自定义 Kafka Consumer Deserializer。 [弹簧靴]
【发布时间】:2026-01-15 05:25:02
【问题描述】:

我想在不使用 Confluent 模式注册表的情况下使用 avro 消息并反序列化它们。我在本地有架构。所以,为此,我只关注了https://medium.com/@mailshine/apache-avro-quick-example-in-kafka-7b2909396c02 的消费者部分。现在,我想在 application.properties 文件中配置这个反序列化器(Spring 引导方式)。 我尝试添加 spring.kafka.consumer.value-deserializer=com.example.AvroDeserializer 但这会导致错误提示“找不到 com.example.AvroDeserializer 的公共无参数构造函数”。 有什么方法可以使用 application.properties 配置中的参数调用构造函数。 或者 我需要在代码而不是属性中配置它吗?

提前致谢!!

【问题讨论】:

    标签: spring-boot kafka-consumer-api spring-kafka


    【解决方案1】:

    您可以使用属性来实现,但您必须通过 configure 方法(使用无参数构造函数)来实现 - 这是因为 Kafka 实例化了反序列化器,而不是 Spring。

    有关示例,请参阅org.springframework.kafka.support.serializer.JsonDeserializer 源代码。

    否则,您可以将反序列化器注入消费者工厂...

    @Bean
    MyDeserializer(DefaultKafkaConsumerFactory<String, Foo> factory) {
        MyDeserializer<Foo> deser = new MyDeserializer<>(...);
        factory.setValueDeserializer(deser);
        return deser;
    }
    

    【讨论】: