Flink在Flink应用程序(https://ci.apache.org/projects/flink/flink-docs-stable/dev/types_serialization.html)的飞行前阶段执行重要的扫描。创建源,运算符和接收器的行为使Flink扫描给定流流的拓扑中使用的对象的数据类型,因为Flink显然将尝试基于此信息来优化作业。
此扫描是否可配置?我可以关闭它,仅强制Flink仅使用Kryo序列化,而不需要或不使用任何此扫描信息吗?
我在自动生成的专有库中有一个很大的,深层嵌套的类,Flink扫描它时似乎陷入了一个很大的无穷循环,运行了几个小时后会导致内存不足错误(应用程序永远不会实际上通过env.execute()
启动,即使我大大增加了堆大小也是如此)。该类具有许多循环引用,即class及其子类包含对相同类型其他类的引用,这可能有问题吗?
答案 0 :(得分:0)
您可以尝试
env.getConfig().addDefaultKryoSerializer(clazz, serializer)
其中序列化器是custom serializer。
您可以通过以下方式强制Kryo
env.getConfig().enableForceKryo();
有关更多信息,请参见serialization of pojo types。