如果两个运算符正在处理相同的上游,那么每个运算符是接收每个元素的副本,还是处理相同的元素。例如,在以下代码中:
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,使用';对象重用模式';关于如何安全使用它的一些指南。