Apache flink 当优雅地使用多个主题时,如何在flink中管理多个avsc文件
我的情况如下: 我使用flink使用SimpleStringSchema阅读卡夫卡中的许多主题。之所以使用OutputTag,是因为我们需要在以后按主题将Parquet+Snappy中的数据存储到目录中。然后我们浏览所有主题,同时使用AVSC模式文件处理每个主题 现在,当添加一些新列时,我必须修改avsc模式文件。当需要修改十个或一百个文件时,这会给我带来麻烦Apache flink 当优雅地使用多个主题时,如何在flink中管理多个avsc文件,apache-flink,parquet,Apache Flink,Parquet,我的情况如下: 我使用flink使用SimpleStringSchema阅读卡夫卡中的许多主题。之所以使用OutputTag,是因为我们需要在以后按主题将Parquet+Snappy中的数据存储到目录中。然后我们浏览所有主题,同时使用AVSC模式文件处理每个主题 现在,当添加一些新列时,我必须修改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字节)。缺点是您不能强制只设置一个子类型
此模式与模式注册表完全兼容,因此无需手动解析任何内容。我不太了解此信封是如何演变的。你的意思是每个主题的所有不同模式都存储在这个信封格式中吗?如果有一个具体的例子,我将不胜感激。您能提供一些您使用的示例模式吗?我不太理解这个信封是如何演变的。你的意思是每个主题的所有不同模式都存储在这个信封格式中吗?如果有一个具体的例子,我将不胜感激。您能提供一些您使用的示例模式吗?