我正在尝试构建一个kakfa管道,它将JSON输入数据读入Kafka主题
我正在使用AVRO序列化和架构注册表,因为我的架构会定期更改
截至目前,GenericRecord用于解析模式
但我最近才知道avro-tools可用于读取模式并生成可用于创建Producer Code的Java类。
我很困惑在这两个选项之间做出选择
你可以建议我哪一个更好,因为我的架构经常变化?
答案 0 :(得分:0)
avro-tools可用于读取模式并生成可用于创建Producer Code
的java类
他们创建特定的Avro类,而不是生产者代码,但是关于这个问题。两者都有效。
我看待它的方式
GenericRecord
- 将其视为HashMap<String, Object>
。作为消费者需要了解要获得的字段。如果作为制作人或模式创建者,您无法将您的课程作为图书馆发送给您的消费者,那么这本质上是您可以获得的最佳选择。我相信您始终能够获取最新数据(get("fieldname")
来电可以访问所有可能的字段。See example here SpecificRecord
(avro-tools
生成的内容) - 它只是一个带有getter方法和构建器对象/ setter方法的生成类。任何使用者都可以将生成器类作为依赖项导入,反序列化消息,然后立即知道哪些字段可用。您不能保证在这里获得最新的架构 - 您将会降级&#34;降级&#34;并且限于用于生成这些类的任何模式。 我使用avro-maven-plugin
来创建类。 Just as this example
您也可以使用Java类中的AvroReflect
to build an Avro schema而不是相反。设置@Union
或@AvroDefault
设置的字段Annotations can be used。