1.6 任务提交模型
在Flink任务提交中,主要包含以下三种角色。
● Client:提交Flink作业的机器称为Client。用户编写的程序代码会构建出数据流图,然后通过Client提交给JobManager。
● JobManager:主节点(master),相当于YARN里面的ResourceManager,生成环境中一般可以用作实现高可用性(HA)。JobManager会将任务进行拆分,然后调度到TaskManager上面执行。
● TaskManager:从节点(slave),它才是真正实现任务(Task)的部分。
Client提交作业到JobManager,就需要跟JobManager进行通信,这里的通信使用Akka框架或者库。另外,Client与JobManager进行数据交互使用的是Netty框架。Akka通信基于Actor System,Client可以向JobManager发送指令,如提交、取消和更新Job。JobManager也可以反馈信息给Client,如状态更新和统计。
Client提交给JobManager的是一个Job,然后JobManager将Job拆分成Task提交给TaskManager(worker)。JobManager与TaskManager也是基于Akka进行通信,JobManager发送指令,如暂停、取消Task和触发checkpoint,TaskManager向JobManager返回TaskStatus、Heartbeat(心跳)、Statistics等。另外,TaskManager之间的数据通过网络进行传输,比如DataStream做一些算子的操作时,数据往往需要在TaskManager之间做数据传输。
●图1-3 Flink任务提交模型
当Flink系统启动时,首先启动JobManager和一个或多个TaskManager。JobManager负责协调Flink系统,TaskManager则是执行并行程序的worker。当系统以本地形式启动时,一个JobManager和一个TaskManager会在同一个JVM中启动。当一个程序被提交后,系统会创建一个Client来进行预处理,将程序转变成并行数据流的形式,交给JobManager和TaskManager执行。