avro序列化

mbjcgjjk  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(482)

我正在尝试构建一个kakfa管道,将json输入数据读入kafka主题。
我将avro序列化与schema registry一起使用,因为我的模式会定期更改。
到目前为止,genericrecord用于解析模式。
但我最近了解到avro工具可用于读取模式和生成java类,这些类可用于创建生产者代码。
在这两种选择中我很困惑。
你能不能建议我哪一个更好,因为我的模式经常改变?

vaj7vani

vaj7vani1#

avro工具可用于读取模式并生成java类,这些类可用于创建生产者代码
它们创建特定的avro类,不是生产者代码,而是关于这个问题。两者都会起作用。
在我看来 GenericRecord -把它当作一个 HashMap<String, Object> . 作为消费者,需要知道要获得的字段。如果作为生产者或模式创建者,您不能将类作为库发送给用户,那么这基本上是您所能得到的最好的。不过,我相信您始终能够获得最新的数据(所有可能的字段都可以通过 get("fieldname") 打电话。请看这里的示例 SpecificRecord (什么 avro-tools 它只是一个生成的类,包含getter方法和builder对象/setter方法。任何使用者都可以将生产者类作为依赖项导入,反序列化消息,然后立即知道哪些字段可用。您不能保证在这里获得最新的模式—您将被“降级”,并且仅限于用于生成这些类的任何模式。
我用 avro-maven-plugin 通常创建类。就像这个例子
你也可以用 AvroReflect 从java类构建avro模式,而不是相反。可以在要设置的字段上使用注解 @Union 或者 @AvroDefault 设置。
关于使用合流模式注册表的进一步阅读

相关问题