这是我的案例:我使用flink通过SimpleStringSchema使用Kafka中的许多主题。之所以使用OutputTag,是因为我们稍后需要将Parquet + Snappy中的数据按主题存储到目录中。然后,我们遍历所有主题,同时使用AVSC模式文件处理每个主题。
现在,当添加一些新列时,我必须修改avsc模式文件。当需要修改十个或几百个文件时,这会给我带来麻烦。
那么,有没有更好的方法来避免更改avsc文件,或者如何更好地管理它们呢?
发布于 2019-12-25 05:23:04
通常,我会避免在同一个源中摄取具有不同模式的数据。对于同一主题中的多个模式尤其如此。
避免这种情况的一种常见且可扩展的方法是使用某种信封格式。
{
"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个字节)。缺点是您不能强制只设置其中一个子类型。
此模式与模式注册表完全兼容,因此不需要手动解析任何内容。
https://stackoverflow.com/questions/59466651
复制相似问题