3.1 环境对象
- StreamExecutionEnvironment是Flink应用开发时的概念,表示流计算作业的执行环境,是作业开发的入口、数据源接口、生成和转换DataStream的接口、数据Sink的接口、作业配置接口、作业启动执行的入口。
- Environment 是 运 行 时 作 业 级 别 的 概 念 , 从StreamExecutionEnvironment中的配置信息衍生而来。
- RuntimeContext是运行时Task实例级别的概念。RuntimeContext 的 信 息 实 际 上 是StreamExecutionEnvironment中配置信息和算子级别信息的综合。
StreamExecutionEnvironment在作业开发的Main函数中使用,RuntimeContext在UDF开发中使用,Environment则起到衔接StreamExecutionEnvironment和RuntimeContext的作用。
3.1.1 执行环境
当前版本Flink的批流在API并没有统一,所以有流计算(StreamExecutionEnvironment)和批处理(ExecutionEnvironment)两套执行环境。
- LocalStreamEnvironment:本地执行环境,在单个JVM中使用多线程模拟Flink集群。
- RemoteStreamEnvironment:在大规模数据中心中部署的Flink生成集群的执行环境。
- StreamContextEnvironment:在Cli命令行或者单元测试时候会被使用。
- StreamPlanEnvironment::在Flink Web UI管理界面中可视化展现Job的时候,专门用来生成执行计划(实际上就是StreamGraph)
- ScalaShellStreamEnvironment:这是Scala Shell执行环境,可以在命令行中交互式开发Flink作业。
3.1.2 运行时环境
- RuntimeEnvironment:在Task开始执行时进行初始化,把Task运行相关的信息都封装到该对象中。
- SavepointEnvironment:SavepointEnvironment是Environment的最小化实现,在状态处理器 的 API 中 使 用 。
3.1.3 运行时上下文
RuntimeContext是Function运行时的上下文,封装了Function运 行时可能需要的所有信息,让Function在运行时能够获取到作业级别的 信 息。
Function 的 每 个 实 例 都 有 一 个 RuntimeContext 对 象 , 在RichFunction中通过getRunctionContext()可以访问该对象。
3.2 数据流元素
数 据 流 元 素 在 Flink 中 叫 作 StreamElement , 有 数 据 记 录StreamRecord、延迟标记Latency Marker、Watermark、流状态标记StreamStatus这4种。
- StreamRecord:表示数据流中的一条记录(或者叫作一个事件)。
- LatencyMarker:用来近似评估延迟在 Sink 节 点 中 使 用LatencyMarker估计数据在整个DAG图中流转花费的时间,用来近似地评估总体上的处理延迟。
- Watermark:是一个时间戳,用来告诉算子所有时间早于等于Watermark的事件或记录都已经到达。
- StreamStatus:用来通知Task是否会继续接收到上游的记录或者Watermark。
3.3 数据转换
数据转换在Flink中叫作Transformation,是衔接DataStream API和Flink内核的逻辑结构。
Transformation 有 两 大 类 : 物 理 Transformation 和 虚 拟Transformation。在运行时刻,DataStream的API调用都会被转换为 Transformation,然后从Transformation转换为实际运行的算子,而虚拟的Transformation则不会转换为具体的算子。
常见的物理Transformation有:
(1)SourceTransformation
(2)SinkTransformation
(3)OneInputTransformation:单流输入
(4)TwoInputTransformation:双流输入
虚拟的Transformation有:
(1)SideOutputTransformation:侧输出
(2)SplitTransformation:切分流
(3)SelectTransformation
(4)PartitionTransformation:改变输入元素的分区
(5)UnionTransformation
(6)FeedbackTransformation:表示Flink DAG中的一个反馈点。简单来说,反馈点就是把符合条件的数据重新发回上游Transformation处理。
(7)CoFeedbackTransformation:CoFeedBackTransformation 反 馈 给 上 游 的 数 据 流 与 上 游Transformation的输入类型不同
## 3.4 算子
(1)单流输入算子:该类型算子只接收上游1个数据流作为输入,一般的算子都属此类型。
(2)双流输入算子:该算子与TwoInputTransformation对应,接收上游2个不同的DataStream作为输入。**并不存在2个以上输入流的算子**。
(3)数据源算子
(4)异步算子AsyncWaitOperator:异步算子的目的是解决与外部系统交互时网络延迟所导致的系统瓶颈问题。
(1)顺序输出模式
(2)无序输出模式