Flink 核心组件
1、Client
用户一般使用 Client 提交作业,比如 Flink 主目录下 bin 目录中提供的命令行工具。Client 会对用户提交的 Flink 作业进行预处理,并把作业提交到 Flink 集群上。Client 提交作业时需要配置一些必要的参数,比如使用 Standalone 集群还是 YARN 集群等。整个作业被打成了 JAR 包,DataStream API 被转换成了 JobGraph。
2、Dispatcher
Dispatcher 可以接收多个作业,每接收一个作业,Dispatcher 都会为这个作业分配一个 JobManager。Dispatcher 对外提供一个表述性状态转移(Representational State Transfer,REST)式的接口,以超文本传输协议(Hyper Text Transfer Protocal,HTTP)来对外提供服务。
3、JobManager
JobManager 是单个 Flink 作业的协调者,一个作业会有一个 JobManager 来负责。JobManager 会将 Client 提交的 JobGraph 转化为 ExecutionGraph。JobManager 会向 ResourceManager 申请必要的资源,当获取足够的资源后,JobManager 将 ExecutionGraph 以及具体的计算任务分发部署到多个 TaskManager 上。同时,JobManager 还负责管理多个 TaskManager,包括收集作业的状态信息、生成检查点、必要时进行故障恢复等。
4、ResourceManager
Flink 现在可以部署在 Standalone、YARN 或 Kubernetes 等环境上,不同环境中对计算资源的管理模式略有不同,Flink 使用一个名为 ResourceManager 的模块来统一处理资源分配上的问题。在 Flink 中,计算资源的基本单位是 TaskManager 上的任务槽位(Task Slot,简称 Slot)。ResourceManager 的职责主要是从 YARN 等资源提供方获取计算资源,当 JobManager 有计算需求时,将空闲的 Slot 分配给 JobManager。当计算任务结束时,ResourceManager 还会重新收回这些 Slot。
5、TaskManager
TaskManager 是实际负责执行计算的节点。一般地,一个 Flink 作业是分布在多个 TaskManager 上执行的,单个 TaskManager 上提供一定量的 Slot。一个 TaskManager 启动后,相关 Slot 信息会被注册到 ResourceManager 中。当某个 Flink 作业提交后,ResourceManager 会将空闲的 Slot 提供给 JobManager。JobManager 获取到空闲的 Slot 后会将具体的计算任务部署到空闲 Slot 之上,任务开始在这些 Slot 上执行。在执行过程,由于要进行数据交换,TaskManager 还要和其他 TaskManager 进行必要的数据通信。总之,TaskManager 负责具体计算任务的执行,启动时它会将 Slot 资源向 ResourceManager 注册。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/5b035c66a5bfd118067fd7dae】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论