我正在尝试建立一个kakfa管道,它将读取JSON输入数据到Kafka主题。
我在模式注册表中使用AVRO序列化,因为我的模式会定期更改。
到目前为止,GenericRecord用于解析模式。
但是我最近才知道avro-tools可以用来读取模式和生成Java类,这些类可以用来创建生产者代码。
我很困惑在这两个选项之间做出选择。
由于我的模式经常更改,您能建议我哪一个更好吗?
发布于 2018-05-16 08:42:30
avro工具可用于读取模式和生成java类,这些类可用于创建生产者代码
他们创建特定的Avro类,而不是生产者代码,而是关于问题的。两者都会起作用。
在我看来
GenericRecord -把它想象成一个HashMap<String, Object>。作为消费者,需要知道要获取的字段。如果作为生产者或模式创建者,您不能将类作为库发送给消费者,这基本上是您所能得到的最好的结果。不过,我相信您总能获得最新的数据(所有可能的字段都可以通过get("fieldname")调用来访问。See example hereSpecificRecord ( avro-tools生成的)-它只是一个生成的类,带有getter方法和构建器对象/ setter方法。任何消费者都可以将生产者类作为依赖项导入,对消息进行反序列化,然后立即知道哪些字段可用。您不能保证在这里获得最新的模式-您将被“降级”,并被限制到用于生成这些类的任何模式。我通常使用avro-maven-plugin来创建类。Just as this example
您也可以在Java类中使用AvroReflect to build an Avro schema,而不是相反。用于设置@Union或@AvroDefault设置的Annotations can be used on字段。
https://stackoverflow.com/questions/50352277
复制相似问题