flink会在每个流中复制元素还是使用相同的对象



如果两个运算符正在处理相同的上游,那么每个运算符是接收每个元素的副本,还是处理相同的元素。例如,在以下代码中:

DataStream<Data> stream=...; //init a stream of data
stream.process(ProcessFunctionA); //stream was processed by function A
stream.process(ProcessFunctionB); //stream was processed by function A

如果ProcessFunctionA更改数据,ProcessFunctionB会看到更改吗?

默认情况下,Flink会在这种情况下进行防御复制。但是,如果你了解这样做可能存在的陷阱,你可以使用

ExecutionConfig#enableObjectReuse()

启用对象重用,这可能是一个有用的优化,因为它可以避免不必要的副本及其最终的垃圾收集。

参见Flink,使用';对象重用模式';关于如何安全使用它的一些指南。

相关内容

  • 没有找到相关文章

最新更新