工作提交流程
- Flink提交工作,Client向HDFS上传Flink的Jar包和配置
- 之后向Yarn ResourceManager提交工作
- ResourceManager调配Container资源并告诉对应的NodeManager启动ApplicationMaster,ApplicationMaster启动后加载Flink的Jar包和配置来构建环境,而后启动JoManager。
- 之后ApplicationMaster向ResourceManager申请资源启动TaskManager
- ResourceManager调配Container资源后,由ApplicationMaster告诉资源所在节点的NodeManager启动TaskManager,NodeManager加载Jar和配置构建环境并启动TaskManager
- TaskManager启动后向JobManager发送心跳包,并期待JobManager向其分配任务。
任务调度原理
- Client:提交Job的客户端。
- JobManager: 从Client处接到Job和Jar包后,以Task的单元调度到各个TaskManager去执行。即次要负责调度Job并协调Task做checkpoint。
- TaskManager:从JobManager接管须要部署的Task,与自已的上游建设Netty连贯。在启动是设置好槽位数Slot,每个Slot能启动一个Task线程。
当Flink集群启动后,首先会启动一个JobManager和一或多个TaskManager。JobManager再调度各个Task到TaskManager执行,TaskManager将心跳和统计信息汇报给JobManager。
Graph
Flink 中的执行图能够分成四层:StreamGraph -> JobGraph -> ExecutionGraph -> 物理执行图
- StreamGraph:依据用户通过Stream API编写的代码生成最后的图,示意程序的拓扑构造。
- JobGraph:StreamGraph通过优化后生成了JobGraph,是提交给JobManager的数据结构。次要优化位,将多个符合条件的节点chain在一起作为一个节点,这样能够缩小数据在节点之间流动所须要的序列化/反序列化/传输耗费。
- ExecutionGraph:JobManager依据JobGraph生成ExecutionGraph,ExecutionGraph是JobGraph的并行化版本,是调度层最外围的数据结构。
- 物理执行图:JobManager 依据 ExecutionGraph 对 Job 进行调度后,在各个TaskManager 上部署 Task 后造成的“图”
Stream 和 Transformation
Flink是由Stream和Transformation这两个根本构建块组成,其中Stream是一个两头后果数据,Transformation是一个操作,,它对一个或多个输出Stream进行计算解决,输入一个或多个后果Stream。
Flink程序被执行的时候,会被映射为Streaming Dataflow。一个Streaming Dataflow是由一组Stream和Transformation Opearator组成。
并行数据流
一个Stream能够被分成多个Stream Partition,一个Operator能够被分成多个Operator Subtask,每一个Operator Subtask是在不同的线程中独立执行的。一个Operator的并行度,等于Operator Subtask的个数,一个Stream的并行度总是等于生成它的Operator的并行度。
One-to-one模式:比如说从Source[1]到map[1],他放弃了Source的分区个性和分区内元素解决的有序性,也就是说map()[1]的Subtask看到的数据流中记录的数据,与Source[1]看到的记录程序是一样的。
Redistribution模式:这种模式扭转了输出数据流的分区,比方从map()[1]、map()[2]到keyBy()/window()/apply()[1]、keyBy()/window()/apply()[2],上游的Subtask向上游的多个不同的Subtask发送数据,扭转了数据流的分区,这与理论利用所抉择的Operator有关系。
工作链
Fink分布式执行环境中,会将多个Operator Subtask串起来组成一个Operator Chain,实际上就是一个执行链,每个执行链会在TaskManager上一个独立的线程中执行。
Checkpoint机制
- CheckpointCoordinator周期性的向该数据流,所有的source算子发送barrier。
- Source算子接管到一个barrier后,便暂停解决数据,将以后的状态制作成快照,并保留到指定的长久化存储中,最初它再向CheckpointCoordinator报告本人的快照制作状况。同时向本身上游所有算子播送该barrier。而后复原该算子的数据处理工作。
- 上游的算子接管到barrier后,也会暂停自的数据处理过程,同2过程。
- 最初CheckpointCoordinator会确认它接管到的报告,如果收到本周期的所有算子的快照就认为快照制作胜利,否则失败。