一、作业管理器(JobManager)
1、控制一个应用程序执行的主进程,每个应用程序都会被一个不同的JobManager所控制。
2、JobManager会先接收到应用程序,应用程序包括:作业图(JobGraph)、逻辑数据流图和打包的所有类库和其他资源的Jar包。
3、JobManager会把JobGraph转换成一个物理层面的数据流图,这个图被叫做“执行图”(ExecutionGraph),包含了所有可以并发执行的任务。
4、JobManager会向资源管理器(ResourceManager)请求执行任务必要的资源,也就是任务管理器上的slot。一旦获取到足够的资源,就会将执行图分发到真正运行的TaskManager上。
二、任务管理器(TaskManager)
Flink中的工作进程。
1、每一个TaskManager都包含了一定数量的插槽(slots)。插槽的数量限制了TaskManager能够执行的任务数量。
2、启动后,TaskManager回向资源管理器注册它的插槽,收到资源管理器的指令后,TaskManager就会将一个或者多个插槽提供给JobManager调用。JobManager就可以向插槽分配任务(tasks)来执行了。
3、在执行过程中,一个TaskManager可以跟其他运行同一个应用程序的TaskManager交换数据。
三、资源管理器(ResourceManager)
1、负责管理任务管理器(TaskManager)的插槽(slot),TaskManager插槽是Flink中定义的处理资源单元。
2、Flink为不同的环境和资源管理工具提供了不同的资源管理器,比如yarn,mesos,k8s
3、当jobManager申请插槽资源时,resourceManager会将有空闲的插槽的TaskManager分配给JobManager。如果ResourceManager没有足够的插槽来满足jobManager的请求,它还可以向资源提供平台发起会话,提供启动TaskManager进程的容器。
四、分发器(Dispatcher)
1、可以跨作业运行,它为应用提交提供了rest接口。
2、当一个应用被提交执行时,分发器就会启动并将应用移交给一个jobManager。
3、Dispatcher也会启动一个web UI,用来方便展示和监控作业的执行信息。
4、Dispatcher在架构中可能并不是必须的,这取决于应用提交运行的方式。