📜  AVRO-参考API(1)

📅  最后修改于: 2023-12-03 15:29:32.522000             🧑  作者: Mango

AVRO 参考 API

什么是 AVRO?

Apache AVRO 是一种数据序列化系统,它支持兼容性和面向对象的数据结构。AVRO 具有简单的语法、快速的序列化和反序列化速度、动态生成代码和跨平台的支持。它特别适用于处理大数据、流数据和消息传递格式。

AVRO 数据类型

AVRO 支持以下数据类型:

  • Null
  • Boolean
  • Int: 32 位整数
  • Long: 64 位整数
  • Float: 单精度浮点数
  • Double: 双精度浮点数
  • Bytes: 二进制字节
  • String: 字符串
  • Enum: 枚举类型
  • Array: 数组类型
  • Map: Map 类型
  • Union: 可以有多个类型的联合类型
  • Record: 自定义记录类型
AVRO 序列化和反序列化
序列化

使用 AVRO 序列化器,我们可以将一个对象序列化成 AVRO 格式的字节数组,示例代码:

ByteArrayOutputStream out = new ByteArrayOutputStream();
DatumWriter<User> userDatumWriter = new SpecificDatumWriter<>(User.class);
DataFileWriter<User> dataFileWriter = new DataFileWriter<>(userDatumWriter);
dataFileWriter.create(user.getSchema(), out);
dataFileWriter.append(user);
dataFileWriter.close();
return out.toByteArray();
反序列化

使用 AVRO 反序列化器,我们可以将 AVRO 格式的字节数组反序列化成一个对象,示例代码:

ByteArrayInputStream in = new ByteArrayInputStream(bytes);
DatumReader<User> userDatumReader = new SpecificDatumReader<>(User.class);
DataFileReader<User> dataFileReader = new DataFileReader<>(new SeekableByteArrayInput(in), userDatumReader);
User user = null;
while (dataFileReader.hasNext()) {
    user = dataFileReader.next(user);
}
dataFileReader.close();
return user;
AVRO 容器和数据格式
容器格式

AVRO 容器格式支持包括二进制格式和 JSON 格式。

  • Binary:二进制格式通常用于数据存储和网络传输。其中包括包含文件头信息的“DataFile”格式和不包含文件头信息的“Direct Binary”格式。
  • JSON:JSON 格式通常用于程序内部数据传输以及开发测试。其中包括文本格式的“Formatted JSON”和二进制格式的“Unformatted JSON”。
数据格式

AVRO 数据格式支持三种不同的格式类型:

  • Specific:使用具体类型作为数据定义。将生成读写代码。
  • Generic:使用通用记录类型作为数据定义。可以在运行时进行类型检查和解析。
  • Reflect:使用标记为 Java Serializable 的类作为数据定义。可以在运行时进行类型检查和解析。
AVRO API

AVRO API 包含多个类和接口,使用它们可以轻松地进行序列化、反序列化以及定义和操作各种数据结构。其中一些类包括:

  • DatumWriter:将对象序列化成 AVRO 格式。
  • DatumReader:从 AVRO 格式反序列化为 Java 对象。
  • Schema:定义 AVRO 数据类型的对象。
  • SpecificRecord:表示 AVRO Record 类型的 Java 对象。
  • GenericRecord:表示 AVRO Record 类型的 Java 对象,可以访问记录的每个字段。
  • DataFileWriter:将 AVRO 记录写入文件。
  • DataFileReader:从 AVRO 记录文件中读取 AVRO 记录。
总结

Apache AVRO 提供了一种灵活、高效的数据序列化系统,可帮助开发人员在数据处理、流数据和消息传递格式方面取得成功。通过使用 AVRO,您可以轻松地定义和操作各种数据结构,同时获得快速的序列化和反序列化速度、动态生成代码和跨平台的支持。