Apache flink 当优雅地使用多个主题时,如何在flink中管理多个avsc文件

Apache flink 当优雅地使用多个主题时,如何在flink中管理多个avsc文件,apache-flink,parquet,Apache Flink,Parquet,我的情况如下: 我使用flink使用SimpleStringSchema阅读卡夫卡中的许多主题。之所以使用OutputTag,是因为我们需要在以后按主题将Parquet+Snappy中的数据存储到目录中。然后我们浏览所有主题,同时使用AVSC模式文件处理每个主题 现在,当添加一些新列时,我必须修改avsc模式文件。当需要修改十个或一百个文件时,这会给我带来麻烦 那么,有没有更优雅的方法来避免更改avsc文件,或者如何更好地管理它们呢 一般来说,我会避免在同一个源中摄取具有不同模式的数据。对于同一

我的情况如下: 我使用flink使用SimpleStringSchema阅读卡夫卡中的许多主题。之所以使用OutputTag,是因为我们需要在以后按主题将Parquet+Snappy中的数据存储到目录中。然后我们浏览所有主题,同时使用AVSC模式文件处理每个主题

现在,当添加一些新列时,我必须修改avsc模式文件。当需要修改十个或一百个文件时,这会给我带来麻烦


那么,有没有更优雅的方法来避免更改avsc文件,或者如何更好地管理它们呢

一般来说,我会避免在同一个源中摄取具有不同模式的数据。对于同一主题中的多个模式尤其如此

避免这种情况的一种常见且可扩展的方法是使用某种信封格式

{
  "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
    }
  ]
}
这个信封是可进化的(任意添加/删除包装类型,包装类型本身可以进化),并且只增加一点开销(每个子类型1字节)。缺点是您不能强制只设置一个子类型


此模式与模式注册表完全兼容,因此无需手动解析任何内容。

通常,我会避免在同一源中摄取具有不同模式的数据。对于同一主题中的多个模式尤其如此

避免这种情况的一种常见且可扩展的方法是使用某种信封格式

{
  "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
    }
  ]
}
这个信封是可进化的(任意添加/删除包装类型,包装类型本身可以进化),并且只增加一点开销(每个子类型1字节)。缺点是您不能强制只设置一个子类型


此模式与模式注册表完全兼容,因此无需手动解析任何内容。

我不太了解此信封是如何演变的。你的意思是每个主题的所有不同模式都存储在这个信封格式中吗?如果有一个具体的例子,我将不胜感激。您能提供一些您使用的示例模式吗?我不太理解这个信封是如何演变的。你的意思是每个主题的所有不同模式都存储在这个信封格式中吗?如果有一个具体的例子,我将不胜感激。您能提供一些您使用的示例模式吗?