知识卡片

Flink数据类型对运行效率的影响

专业/工作 · 502.a

内容

Flink对参与计算的数据类型做了分级:满足”公开类、无参公共构造函数、字段公开或有getter/setter、字段类型也被支持”这几个条件的类会被识别为POJO,用专门的PojoSerializer高效序列化;不满足条件的普通类只能退化成通用的Kryo序列化器兜底处理,执行效率明显更低。除此之外还有一类值类型(Value types),它们放弃通用序列化框架,手动实现读写接口,换来的好处是可以直接原地修改字段值、重复利用同一个对象实例,从而减轻垃圾回收器的压力。这三者的本质区别在于:类型信息暴露得越充分、越规整,框架就能在序列化和内存布局上做更多针对性优化,反之框架只能用最保守、最慢的通用兜底方案。这套分级背后统一由[[TypeInformation驱动的序列化器生成机制]]调度生成具体的序列化器。

参考来源

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