共享Avro模式/生成的源的最佳实践是什么?
我有两个通过Kafka通信的Java应用程序。 我的想法是将Avro模式用于在应用程序之间流动的事件。 因此,将Avro模式提取到共享库中似乎是个好主意。但是,实际上最佳实践是什么?通常生成的文件不存储在源代码管理中。但是Avro生成的Java类也是如此。如果不是这样,那么每个使用者都必须在编译时生成自己的类。(但是,即使架构处于Maven,gradle等依赖关系中,这也是有可能的)
答案 0 :(得分:0)
总的来说,版本控制是好的,但是您应该忽略生成的源,例如那些以Maven的target
文件夹结尾的源。
例如,在mvn deploy
期间,生成的Java类可以放入Nexus / Artifactory中的共享库,并且可以适当地版本化以供消费者使用。
在avro-maven-plugin生成的类中,该架构可用作静态字段,因此您无需将这些资源复制到包中。
否则,假设您正在使用Confluent Schema Registry,则可以在使用者中使用GenericRecord
类型,然后像通常对JSON消息那样解析消息。例如。 Object fieldName = message.value().get("fieldName")
,与此同时,制作人仍然可以使用特定的Avro类