首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将使用旧版本的模式反序列化的Avro消息转换为较新的已编译模式?

如何将使用旧版本的模式反序列化的Avro消息转换为较新的已编译模式?
EN

Stack Overflow用户
提问于 2021-04-20 07:14:30
回答 1查看 70关注 0票数 1

假设我使用avro-tools为"mySchema“的v2生成代码,一条消息出现在使用"mySchema”的v1编写的队列中。如果我理解正确的话,处理这种情况的最佳方法是认识到消息是用"mySchema“的v1编写的,使用模式注册表获取v1模式,并使用v1反序列化消息。

在这一点上,有没有可能以某种方式将生成的对象转换为来自avro-tools为v2生成的代码的相应字段和对象?

到目前为止,它看起来是处理"GenericRecord“中消息结果的唯一方法,它需要字符串键来访问字段的值。我更喜欢使用为v2生成的代码,并将任何输入错误转换为编译错误而不是运行时错误,在编码时了解值的数据类型,并避免设置一堆枚举来包含字符串键。

EN

回答 1

Stack Overflow用户

发布于 2021-04-21 00:18:04

Avro用户邮件列表中的斯科特回答(https://lists.apache.org/thread.html/r2e77597fd20de1379fdd4287c02fc703a631cd2309f74f33d6a457b8%40%3Cuser.avro.apache.org%3E):

下面的代码返回类型T并使用SpecificDatumReader。

最终记录解码器= DecoderFactory.get().binaryDecoder(...);最终记录记录=新记录(v2Schema,v1Schema);尝试{最终T记录=datumReader.read(空,解码器);返回记录;}捕获(java.io.IOException ioe) { //处理它}

我的错误是缺少new SpecificDatumReader<T>上的T,所以它返回的是GenericRecord而不是T的实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67170438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档