Flink数据类型和序列化
2021-09-19 本文已影响0人
程序员小白成长记
一、为什么Flink需要自定义序列化框架
flink运行在JVM之上,将大量的数据存储在内存中,就会面临JVM存在的问题:
1)Java对象的存储密度比较低
2)fullGC的性能问题
3)OOM造成的稳定性的问题
为了解决这些问题,自己实现一个内存管理,用自定义的内存池进行内存的分配和回收,这样就引出了序列化,是将序列化后的对象存储在内存中的。
开源的序列化框架有很多,但是Flink定制自己的序列化框架的好处:
1)Flink对于类型信息了解的越多,可以在运行之前完成类型检查的操作,避免在运行时抛出错误
2)知道数据类型可以选择更好的序列化方式,更好的数据布局,减少内存的存储空间
3)可以直接进行二进制的操作
二、Flink的数据类型
image.png image.png三、Flink序列化过程
根据不同的类型获取不同的序列化器,也可以自定义序列化器
image.png image.png四、Flink序列化的最佳实践
最常见的场景
- 注册子类型
- 注册自定义序列化器
- 添加类型提示
- 手动创建TypeInformation
五、参考文档
【1】Flink 数据类型与序列化 PPT
【2】【Apache Flink 进阶教程 视频教程】5、Flink 数据类型和序列化