【问题标题】:Shared Avro Schema files and version control共享 Avro Schema 文件和版本控制
【发布时间】:2019-04-28 11:11:02
【问题描述】:
共享 Avro 架构/生成的源的最佳做法是什么?
我有两个通过 Kafka 进行通信的 Java 应用程序。
我的想法是对在应用程序之间流动的事件使用 Avro 模式。
因此,将 Avro 模式提取到共享库中似乎是个好主意。但是这里的最佳实践是什么?通常生成的文件不存储在源代码管理中。但是 Avro 生成的 Java 类也是如此。如果不是 - 那么每个消费者都必须在编译时生成自己的类。(但如果模式在 maven、gradle 等依赖项中,这是否可能)
【问题讨论】:
标签:
java
version-control
avro
【解决方案1】:
总体而言,版本控制很好,但您应该忽略生成的源,例如那些最终位于 Maven 中的 target 文件夹中的源。
生成的 Java 类可以进入放置在 Nexus/Artifactory 中的共享库,例如在mvn deploy 期间,并且可以从那里进行适当的版本化以供消费者使用。
在 avro-maven-plugin 生成的类中,模式可用作静态字段,因此您无需将这些资源复制到包中。
否则,假设您正在使用 Confluent Schema Registry,您可以在您的消费者中使用 GenericRecord 类型,然后像通常解析 JSON 消息一样解析消息。例如。 Object fieldName = message.value().get("fieldName"),同时生产者仍然可以有一个特定的 Avro 类