首页 > 解决方案 > 使用 Avro 将 GenericRecord 转换为 SpecificRecord 对象

问题描述

Confluent.Kafka.Avro用于 Apache Kafka 的生产者和消费者之间的序列化。从生产者那里我使用特定的记录,但在消费者方面我想将所有记录作为通用的,然后将它们转换为特定的记录。有没有办法自动做到这一点?还是需要实现所有这些转换?

标签: c#.net-coreavroconfluent-platform

解决方案


如果您有特定记录并且知道可以转换为该记录,则应使用 Kafka 的SpecificRecord反序列化器。我相信在您的 Kafka 使用者中转换为GenericRecord有意义的唯一情况是,当您知道无法使用当前特定的数据类对 Avro 内容进行反序列化时,因为要么您没有该数据的任何特定数据类(架构/ message 事先不知道),或者架构以不兼容的方式更改,因此无法将数据反序列化到您当前的SpecificRecord类中。这些情况都不适用于您,因为您明确表示您拥有SpecificRecord必要的课程。

话虽如此,根据我在这里的回答https://stackoverflow.com/a/59442020/430128,您可以将 Avro 转换GenericRecordSpecificRecordusing deepCopy

SpecificData.get().deepCopy(genericRecord.schema, genericRecord)

推荐阅读