如何在Flink管理许多avsc文件时,消费多个主题优雅

1qczuiv0  于 2021-06-24  发布在  Flink
关注(0)|答案(1)|浏览(281)

我的例子是:我使用flink使用simplestringschema来消费Kafka中的许多主题。使用outputtag是因为我们需要稍后按主题将parquet+snappy中的数据存储到目录中。然后我们遍历所有主题,而每个主题都是用avsc模式文件处理的。
现在,当添加一些新列时,我必须修改avsc模式文件。当需要修改十到一百个文件时,我会有麻烦的。
那么,有没有更优雅的方法来避免更改avsc文件,或者如何更好地管理它们呢?

rqdpfwrv

rqdpfwrv1#

一般来说,我会避免在同一个源中摄取具有不同模式的数据。对于同一主题中的多个模式尤其如此。
避免这种情况的一种常见且可扩展的方法是使用某种信封格式。

{
  "namespace": "example",
  "name": "Envelope",
  "type": "record",
  "fields": [
    {
      "name": "type1",
      "type": ["null", {
        "type": "record",
        "fields": [ ... ]
      }],
      "default": null
    },
    {
      "name": "type2",
      "type": ["null", {
        "type": "record",
        "fields": [ ... ]
      }],
      "default": null
    }
  ]
}

这个封套是可进化的(任意添加/删除 Package 类型, Package 类型本身可以进化),并且只增加一点开销(每个子类型1字节)。缺点是您不能强制只设置一个子类型。
此模式与模式注册表完全兼容,因此无需手动解析任何内容。

相关问题