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

Apache flink flink会复制每个流中的元素还是使用相同的对象?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,如果两个操作员正在处理相同的上游,那么每个操作员是收到每个元素的副本还是正在处理相同的元素。 例如,在以下代码中: DataStream<Data> stream=...; //init a stream of data stream.process(ProcessFunctionA); //stream was processed by function A stream.process(ProcessFunctionB); //stream was processed by fu

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

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
DataStream=//初始化数据流
流程(processfuncta)//流由函数A处理
流程(ProcessFunctionB)//流由函数A处理

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

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

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

有关如何安全使用此设备的一些指南,请参阅