在一个avro文件中使用两个架构进行Avro架构更新

时间:2017-11-05 18:13:31

标签: hdfs avro spark-avro confluent-schema-registry

我有一个带有第一个模式的avro文件,然后我更新了附加到同一文件的模式。所以现在我在一个文件中有两个模式。 avro如何处理这种情况。我是否会在文件中添加任何新字段,或者在读取此数据时是否会丢失任何数据。这是一个实时流应用程序,我将数据写入hdfs。我的上游系统可能会更新架构,但hdfs编写器可能在旧架构上。所以hdfs avro文件将有两个模式,直到我更新编写器来处理更新的模式。

注意 - 我没有架构注册表,我每天都会创建一个avro文件。因此,如果在一天中间更新架构,我将有一个带有两个架构的avro文件。

1 个答案:

答案 0 :(得分:0)

与Thrift不同,Avro不会在数据中保存有关avro架构的任何元信息。

  1. Avro要求在写入和读取时都存在avro架构。
  2. 假设模式演变是兼容的,因此使用较新版本读取较旧的模式不会导致异常,但可以为新字段设置空值。
  3. 您不断发展的架构需要向后兼容。 Avro提供了检查架构compatibility的实用程序。
  4. 由于您的文件可能有两个不同的版本,但在读取时您将提供一个版本,因此数据将被反序列化为您在读取时提供的版本。