作业管理器JobManager
控制一个程序执行的主进程、是Flink集群中任务调度和服务的核心。
JobMaster对作业单独起控制调度作用
JobMaster是JobManager中最核心的组件,负责处理单独的作业Job。
一个Job对应一个JobMaster。
在作业提交时,JobMaster会接收到要执行的应用。一般是客户提交过来的,包括:Jar包,经过客户端转换处理得到的数据流图(data graph)和作业图-【到底要执行哪些作业】(JobGraph)
JobMaster会把JobGraph转换成一个物理层面可执行的数据流图,这个图叫做“执行图”(ExecutionGraph),它包含了所有可以并发执行的任务。JobMaster会向资源管理器(ResourceManager)发出请求,申请执行任务必要的资源。一旦它获取到了足够的资源,就将会将执行图分发到真正运行它们的TaskManager上。
在运行过程中,JobMaster会负责所有需要中央协调的操作,比如检查点(checkpoints)的协调【定期保存】。
ResourceManager资源管理器
ResourceManager主要负责资源的分配和管理,在Flink集群中只有一个。所谓“资源”,主要是指TaskManager的任务槽(task slots)。任务槽就是Flink集群中的资源调度单元,包含了机器用来执行计算的一组CPU和内存资源。【slot在实际应用中对资源是有所隔离的,主要是内存的隔离,因为CPU是分时复用无法隔离】每一个并行的任务Task都会分配到一个slot上做执行。
Dispatcher分发器
Dispatcher主要负责提供一个REST接口,用来提交应用,并且负责为每一个新提交的作业启动一个新的JobMaster组件(客户端向JobManager提交作业时负责接口通信的组件)。Dispatcher也会启动一个WEB UI,用来方便地展示和监控作业执行的信息。Dispatcher在架构中并不是必须的,(与其他资源管理平台集成后就不需要了,因为资源管理平台可以接收当前作业的提交)在不同的部署模式下可能会被忽略掉。
早期版本里,只有四大组件叫JobManager(JobMaster以前就叫JobManager)、ResourceManager、Dispatcher和TaskManager
任务管理器TaskManager
Flink里的工作进程,TaskManager会有多个。
每个TaskManager都可以包含一定数量的任务槽(task slots)-能够并行执行任务的资源。一个TaskManager有多少插槽,这就决定了一个TaskManager能够同时并行执行多少任务。
启动之后TaskManager会向资源管理器ResourceManager注册自己的插槽(当前可用资源)。JobMaster发出请求有新的作业想要资源,ResourceManager就会向TaskManager发出指令提供资源给当前作业执行,TaskManager就会将一个或多个插槽提供给JobMaster调用。JobMaseter就可以像插槽分配任务tasks来执行了。
在执行过程,多个TaskManager之间可以互相交换数据,每个TaskManager可以有自己的buffer做数据的缓冲。