Flink:是否支持多执行环境?

Flink: Are multiple execution environments supported?

一个Flink程序可以创建多个ExecutionEnvironment吗?更具体地说,在同一个 main 方法中创建一个 ExecutionEnvironment 和一个 StreamExecutionEnvironment,这样就可以处理批处理,然后毫无问题地转换为流式处理?

我想另一种可能性是将程序一分为二,但出于我的测试目的,这似乎更好。 Flink 是否为这种场景做好了准备?


一切似乎都工作正常,除了我目前在 join 在公共索引上使用两个流并使用 window(TumblingProcessingTimeWindows.of(Time.seconds(1))) 时遇到没有输出的问题。我已经在 StreamExecutionEnvironment 上调用了 setStreamTimeCharacteristic(TimeCharacteristic.EventTime),甚至尝试使用 assignTimestampsAndWatermarks 在两个加入的流上分配自定义水印,其中我只是 return System.currentTimeMillis() 作为每条记录的时间戳。 由于它完成得非常快,所以两个流都应该适合那 1 秒 window,不是吗?两个流在加入之前打印得很好。如果有人感兴趣,我可以尝试提供代码的重要部分(它相当冗长)。


更新:好的,所以我将两个环境分开(将每个环境放在 main 方法中),然后我简单地从第二个 main 方法调用第一个 main 。描述的问题不再出现。

不,这不受支持,而且不会真正起作用。

至少在 Flink 1.9 之前,给定的应用程序必须具有 ExecutionEnvironment 并使用 DataSet API,或者 StreamExecutionEnvironment 并使用 DataStream API。您不能将两者混合在一个应用程序中。

目前正在进行更彻底地统一批处理和流处理的工作,但这是一项正在进行的工作。为了更好地理解这一点,您可能需要在 this recent Flink Forward talk 可用时观看视频。