join - 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。不再出现所描述的问题。
解决方案
不,这不受支持,并且不会真正起作用。
至少在 Flink 1.9 之前,给定的应用程序必须要么具有 ExecutionEnvironment 并使用 DataSet API,要么具有 StreamExecutionEnvironment 并使用 DataStream API。您不能将两者混合在一个应用程序中。
正在进行更完整地统一批处理和流式处理的工作,但这是一项正在进行的工作。为了更好地理解这一点,您可能需要观看最近的 Flink Forward 演讲视频(当它可用时)。
推荐阅读
- asp.net-core - .Net Core 2.1 中用户 int 而不是字符串作为主键的脚手架标识
- java - 如何在两个字符上使用 .indexOf?
- c++ - 如何从 constexpr char* 构造更大的 std::array
- python - 键值映射
- azure - 调用 API 管理 API 时为逻辑应用创建触发器的方法
- yii2 - 如何在 twig 中配置 ActiveForm 的模型
- r - 以 grid.arrange 或 facet_wrap 方式排列多个循环生成的 ggplots
- dart - StreamBuilder 不会在流中的新事件上重建
- python - 从修改默认值的函数调用具有不同默认参数的多个函数
- c# - 记录器上的 NLog 列表属性值