Apache Flink中RuntimeExecutionMode和ExecutionMode有什么区别?
Flink RuntimeExecutionMode 与 ExecutionMode 核心差异及定义
两个类的官方定义
1. org.apache.flink.api.common.ExecutionMode(已废弃)
这是Flink 1.12版本之前为旧DataSet批处理API设计的枚举类,仅用于控制批处理场景下的数据交换策略,目前已被官方标记为废弃,新版本不推荐使用。
它的四个枚举值都是围绕数据交换逻辑定义的:
PIPELINED:默认流水线交换,上游产出数据后立即发往下游PIPELINED_FORCED:强制使用流水线交换,禁止任何场景下回退到批量交换BATCH:批量交换,上游所有数据计算完成后再统一发往下游BATCH_FORCED:强制使用批量交换
2. org.apache.flink.api.common.RuntimeExecutionMode(当前主流)
这是Flink 1.12推出流批一体架构后新增的核心配置类,也是现在大家日常简称的ExecutionMode,用于控制整个Flink作业的全局运行时模式,会影响调度、容错、优化规则等全链路执行逻辑。
它的三个枚举值对应流批一体的三种执行策略:
STREAMING:流模式,默认值,所有数据走流水线交换,支持运行无界流作业BATCH:批模式,针对有界数据集做了大量性能优化,仅支持运行有界作业,数据交换默认走批量策略AUTOMATIC:自动模式,Flink根据输入源的有界性自动选择执行模式:所有输入都是有界的则用批模式,存在任意一个无界输入则用流模式
二者核心差异
- 设计定位不同:
ExecutionMode是旧批处理API的附属配置,仅控制数据交换逻辑;RuntimeExecutionMode是流批一体架构的核心顶层配置,定义整个作业的运行模式 - 作用范围不同:
ExecutionMode仅影响数据交换层策略;RuntimeExecutionMode会覆盖调度逻辑、任务生命周期、容错策略、SQL优化规则等全链路runtime行为 - 功能兼容性不同:
ExecutionMode对应的旧DataSet API不支持状态、窗口等流原生API;RuntimeExecutionMode的批模式完全兼容Flink的状态、窗口等核心API,批流可以用同一套代码逻辑实现 - 维护状态不同:
ExecutionMode已废弃,后续版本会被移除;RuntimeExecutionMode是当前官方唯一主推的执行模式配置
内容的提问来源于stack exchange,提问作者Jayden__
相关产品推荐
相关产品推荐

