如何反序列化Avro总和/联合类型?

时间:2020-08-06 19:22:34

标签: serialization apache-kafka avro confluent-platform avro4s

我们在编译过程中使用了sbt,scala,Avro,Kafka,avro4s和avro-hugger sbt插件,以从.avsc类型的Avro文件定义生成scala案例类。

特定的Kafka主题具有Avro类型,表示为其他两种类型的并集:仅消息具有T1或T2类型(类似于两种类型的事件)。

我正在尝试为Either [T1,T2]实现Serde(序列化器加反序列化器)。

当尝试实现类似以下内容时:

def serializer(): Serializer[Either[TariffUpserted, TariffCancelled]] =
            (topic: String, data: Either[TariffUpserted, TariffCancelled]) => {
              data match {
                case Left(tariffUpserted) =>
                  implicitly[Serde[TariffUpserted]]
                    .serializer()
                    .serialize(topic, tariffUpserted)
                case Right(contractCancelled) =>
                  implicitly[Serde[TariffCancelled]]
                    .serializer()
                    .serialize(topic, contractCancelled)
              }
            }

我意识到Avro标准必须指定某种类型的标头,在该标头中写入哪种类型(T1或T2)是其余有效负载进行编码的类型。

我该如何实现?

0 个答案:

没有答案