Java 本身自帶的序列化和反序列化的功能,但是輔助信息佔用空間比較大,在序列化對 象時記錄了過多的類信息。Apache Flink 摒棄了 Java 原生的序列化方法,以獨特的方式處理 數據類型和序列化,包含自己的類型描述符,泛型類型提取和類型序列化框架。
TypeInformation 是所有類型描述符的基類。它揭示了該類型的一些基本屬性,並且可以生 成序列化器。
TypeInformation 支持以下幾種類型:
- BasicTypeInfo: 任意 Java 基本類型或 String 類型。
- BasicArrayTypeInfo: 任意 Java 基本類型數組或 String 數組。
- WritableTypeInfo: 任意 Hadoop Writable 接口的實現類。
- TupleTypeInfo: 任意的 Flink Tuple 類型(支持 Tuple1 to Tuple25)。Flink tuples 是固定長度固定類型的 Java Tuple 實現。
- CaseClassTypeInfo: 任意的 Scala CaseClass(包括 Scala tuples)。
- PojoTypeInfo: 任意的 POJO (Java or Scala),例如,Java 對象的所有成員變量,要麼是 public 修飾符定義,要麼有 getter/setter 方法。
- GenericTypeInfo: 任意無法匹配之前幾種類型的類。
針對前六種類型數據集,Flink 皆可以自動生成對應的 TypeSerializer,能非常高效地對 數據集進行序列化和反序列化。