知识卡片

TypeInformation驱动的序列化器生成机制

专业/工作 · 502.a.1

内容

Flink的类型系统以TypeInformation这个抽象基类为核心:每种具体数据类型都对应一个TypeInformation实现类(如POJO对应PojoTypeInfo),而每个TypeInformation又对应生成一个具体的TypeSerializer。对于像Tuple3这样的组合类型,框架不会整体当成一个黑盒去序列化,而是递归地为每个字段单独找到对应的TypeInformation和序列化器(String字段用StringSerializer、Long字段用LongSerializer),再把结果拼接起来——组合类型的序列化能力完全是从更小的类型单元组装出来的。这套”类型信息与序列化逻辑解耦,靠类型驱动生成具体实现”的思路是很多高性能框架处理异构数据的通用做法。由于Java泛型存在类型擦除,编译后泛型的具体类型信息会丢失,Flink在遇到泛型类时无法自动推断,需要开发者用TypeHint手动补充类型信息弥补这个损失。各类型具体被划入哪一档序列化效率,见[[Flink数据类型对运行效率的影响]]。

参考来源

《Flink入门与实战》第5章《数据类型与序列化》