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 可用时观看视频。
一个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 可用时观看视频。