我们有一个 Quarkus 项目,它使用 Apache Kafka 以及 Confluence 模式注册表和 Avro。 它使用 Quarkus 代码生成机制从 Avro 模式生成 Java 文件,并从某个 Kafka 主题进行消费。
本主题的制作者对 Avro 架构中的命名空间进行了更改。这导致我们的消费者应用程序出现反序列化异常。
Could not find class X specified in writer's schema whilst finding reader's schema for a SpecificRecord.
由于类的生成方式,我知道这是 Java 特有的问题。我使用 Scala 的同事重写了 KafkaAvroDeserializerConfig.SPECIFIC_AVRO_VALUE_TYPE_CONFIG 来解决这个问题。
是否可以在 Quarkus/smallrye 中覆盖此配置? 类似于
mp.messaging.incoming.[channel].specific.avro.value.type
?
我还应该将
mp.messaging.incoming.[channel].specific.avro.reader
设置为 true
吗?
还有其他方法可以缓解这个问题吗?
我尝试在读者模式中使用别名,但仍然遇到相同的异常。我也尝试过“设置”
mp.messaging.incoming.[channel].specific.avro.value.type
,但不确定这个属性是否确实存在,并且我仍然遇到相同的异常。
该项目使用旧版本的 kafka-avro-serializer。升级到更高版本后(https://github.com/confluenceinc/schema-registry/issues/3001已修复的版本)设置属性
mp.messaging.incoming.[channel].specific.avro.value.type
实际上按预期工作。