首页 > 解决方案 > 是否可以配置 Flink 飞行前类型的序列化扫描?

问题描述

Flink 在 Flink 应用程序的预运行阶段执行大量扫描(https://ci.apache.org/projects/flink/flink-docs-stable/dev/types_serialization.html)。创建源、运算符和接收器的行为会导致 Flink 扫描在给定流的拓扑中使用的对象的数据类型,因为显然 Flink 将尝试基于此信息优化作业。

此扫描是否可配置?我可以关闭它并强制 Flink 仅使用 Kryo 序列化而不需要或使用任何这些扫描信息吗?

我在一个自动生成的专有库中有一个非常大、深度嵌套的类,并且 Flink 在扫描它时似乎进入了一个非常大的无限循环,导致运行几个小时后出现内存不足错误(应用程序实际上从未通过env.execute(),即使我显着增加了堆大小)。该类有许多循环引用,即类及其子类包含对同一类型的其他类的引用,这可能是一个问题吗?

标签: apache-flinkflink-streaming

解决方案


你可以试试

env.getConfig().addDefaultKryoSerializer(clazz, serializer)

其中 serializer 是自定义序列化程序。

您可以通过以下方式强制 Kryo

env.getConfig().enableForceKryo();

有关更多信息,请参阅pojo 类型的序列化。


推荐阅读