系统的架构是整个系统的全貌,咱们要了解的是系统包含的各个模块以及每一个模块的指责和各个部分的相互关系。flink的架构以下图所示:
如图所示:flink系统包含三部分:client, jobmanager,taskmanager。html
client
程序中编写使用的每一个算子(map, flatmap等)都会解析为operate,Flink采用了相似责任链模式的方式对operator进行组合,client根据operate配置的责任链模式将生成程序的拓扑结构图StreamGraph,并转换为JobGraph,也就是task list,而后将JobGraph提交到jobmanager,并返回。apache
jobmanager
主要负责调度 Job 并协调 Task 作 checkpoint。从 Client 处接收到 Job 和 JAR 包等资源后,会生成优化后的执行计划,并以 Task 的单元调度到各个 TaskManager 去执行。
当job执行的时候,jobmanager将和分发的任务保持通讯,来对任务进行调度(启动下一个task,响应完成或失败的task)。
一个jobgraph表明一个包含一系列操做(operators用jobvertex表示)和中间数据(intermediateDataset)的数据流, 每一个operator具备属性,好比说执行的并行度。除此以外,jobgraph包含一系列的和运行相关的库。
当jobmanager接收Jobgraph,当jobmanager将jobgrph转换为ExecutionGraph。ExecutionGraph是一个并行的Jobgrph。每个jobVerter,将被转换为一个ExecutionVetex。一个并行度为100的operate将被转换为1个jobvertex和100个ExecutionVertices。ExecutionVertex追踪subtask的状态。一个jobvetex中转换的全部的ExecutionVertices,包含在一个ExecutionJobVertex中,维护一个状态。除了vertics,ExecutionGraph还包含termediateResult和inteermediateResultPations。架构
参考文档优化