avro genericdata记录应该在哪里转换为实现avro specificred的customevent?

soat7uwm  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(451)

使用 spring-boot 2.4.4, spring-kafka 2.6.7, kafka client 2.6.0, confluent 6.6.1 (用于 KafkaAvroSerializer &架构注册表), Scala 13 .

CustomEvent implements org.apache.avro.specific.SpecificRecord {}

@KafkaListener(topics = "..", containerFactory = "..", errorHandler = "..")
public void processStreamMessage(@Payload CustomEvent customEvent, Acknowledgment acknowledgment) {}

在“生产”中 @KafkaListener 被适当的
CustomEvent @Payload ,所以这个转换发生在从字节到 Avro GenericRecord 然后到 CustomEvent SpecificRecord .
但是在组件测试中,取决于我们在哪里运行它们(gradle locally/docker中的gradle),它要么变成绿色,要么失败 "Cannot convert from [org.apache.avro.generic.GenericData$Record] to CustomEvent" …更奇怪的是,组件测试在mac上通过,而不是在docker中,但在尝试调试时总是命中 Cannot convert from [org.apache.avro.generic.GenericData$Record] to..CustomEvent.. 我检查了启动jar中是否存在任何jar的单一版本。所以非决定论似乎被排除在外。不知道还有什么能改变它的工作方式(部署;gradle测试在mac上本地运行)和失败的地方(docker中的gradle测试)。
这种转换应该在哪里发生?

hxzsmxv2

hxzsmxv21#

转换由 KafkaAvroDeserializer ; 你需要设置它的 specific.avro.reader 属性设置为true。 KafkaAvroDeserializerConfig.SPECIFIC_AVRO_READER_CONFIG .
我猜这在生产中是正确的,但在你的测试中却不是这样。
显示您的配置和测试。

相关问题