首页 > 解决方案 > Flink:是否支持多种执行环境?

问题描述

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

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


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


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

标签: joinapache-flinkenvironmentflink-streaming

解决方案


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

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

正在进行更完整地统一批处理和流式处理的工作,但这是一项正在进行的工作。为了更好地理解这一点,您可能需要观看最近的 Flink Forward 演讲视频(当它可用时)。


推荐阅读