我在https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/dev/dataset/overview/
在我看来:
- 对于批处理,我需要
ExecutionEnvironment
,就像val env = ExecutionEnvironment.getExecutionEnvironment
一样 - 对于流,我需要
StreamExecutionEnvironmetn
,就像val env = StreamExecutionEnvironment.getExecutionEnvironment
一样
我已经对这些执行环境感到困惑了。由于Flink被认为是统一的批处理框架,我认为执行环境的创建应该只有one
,例如:
流的val env = ExecutionEnvironment.getExecutionEnvironment("streaming mode ")
,以及val env = ExecutionEnvironment.getExecutionEnvironment("batch mode")
,
我想问一下为什么执行环境是分开的。当涉及到执行环境时,我总是感到困惑,包括表执行环境。我想我没有领会设计的考虑因素。
API现在有点令人困惑。但社区正在努力消除这种遗留问题并统一API。
在早期,Flink最初是一个批处理处理器,拥有流媒体运行时。因此,具有ExecutionEnvironment
的数据集API被公开用于批处理。
(数据集API即将报废,将很快被弃用。(
随后,Flink通过带有StreamExecutionEnvironment
的DataStream API公开了流运行时。这是目前的主要API之一。它的愿景是处理无界和有界流。由于批处理只是流处理的一种特殊情况,因此可以将其归类为有界流处理。
带有TableEnvironment
的API表是第一个将两个世界完全统一在一个API中的API。DataStream API当前正在接收批处理执行模式,以便更快地处理有界流。所有这些都已经存在于表API中。