在Apache AVRO中创建“抽象模式”

时间:2017-10-09 13:11:55

标签: avro

我有一系列微服务,可以在主题中相互发送AVRO序列化对象。

我想创建一个监控基础结构,它将记录程序中发送的所有对象。

为了实现这样的基础设施,我需要我的监控过程能够一般地订阅每个主题,并读取所有对象的公共属性(例如,交易ID)。

问题是每个对象都使用不同的模式进行序列化,如果我将使用这个简单的AVRO实现,我的监控过程将不得不为它订阅的每个主题使用不同的模式(因此它不是通用的)。

我考虑过制作一个包含“通用字段”的通用对象,另外还有一个包含所有类型项目的联盟,如下所示:

record Record{
  long transactionId;
  union { null, ObjectA, ObjectB} nestedObject;
}
\\ ...ObjectA and ObjectB definition

我认为这会有效,但我对此解决方案有3个问题:

  1. 每次向项目添加对象时,我都必须更新“母模式”。
  2. 所有对象都需要在所有微服务中编译。
  3. 所有架构都需要在一个文件中定义,因此要匹配一个版本。
  4. 是否有更好的方法为所有模式创建“通用部分”,监督过程将能够反序列化(不知道特定模式)?

0 个答案:

没有答案