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

will flink copy element in each stream or use the same object?

如果两个操作员正在处理同一个上游,每个操作员是否收到每个元素的副本,或者他们正在处理相同的元素。 例如,在下面的代码中:

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()

启用对象重用,这是一项有用的优化,因为它避免了不必要的复制及其最终的垃圾回收。

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