ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Flink 系统架构

2022-06-16 14:33:09  阅读:251  来源: 互联网

标签:JobMaster 架构 ResourceManager JobManager Flink 系统 TaskManager 执行


  对于数据处理系统的架构,最简单的方式就是单节点。当数据量增大,计算逻辑更加复杂多变时,可以考虑增加CPU、加大内存,也就是让一台机器变得性能更加强大从而提高计算性能——这是所谓的对称多处理架构(SMP),但是SMP存在问题很明显:所有CPU 完全平等,所有内存、总线资源共享,这就势必造成资源竞争;而且随着CPU、内存的增大,机器成本会成指数级增长,故此SMP可扩展性是很差的,无法应对海量数据的处理场景。与SMP对应的是分布式的大规模并行处理架构,MPP,之前遇到的Hadoop、Spark 包括现在的Flink都是基于这种架构类型设计的。分布式架构面对的最重要的问题莫过于:集群资源的分配与管理、进程协调调度、持久化和高可用数据存储,以及故障恢复。不过幸运的是:对于这些经典的分布式问题,业内已经有相对成熟的解决方案和服务了,所以Flink不会自己处理所有的问题,而是利用现有的架构和服务 这样Flink可以把精力集中在分布式流数据处理上。flink可以配置为独立模式(Standalone),也可以和现有的资源管理工具集成在一起使用,比如 yarn /k8s/mesos,flink也不会自己提供持久化分布式存储,而是直接使用已有的分布式文件系统——HDFS,或者使用S3,至于高可用配置,flink 依靠的是zookeeper来完成,

1、整体架构

  Flink 运行时架构中,最重要的就是两大组件:作业管理器——JobManager和任务管理器——TaskManager。对于一个提交执行的作业,JobManager是真正移移的管理者(Master),负责管理调度。所以在不考虑高可用的情况下只有一个;TaskManager是工作者(Worker),负责具体任务的执行,可以有多个。Flink的作业提交和任务执行的系统如下:

  这里客户端其实不是处理系统的一部分,它只负责作业的提交。具体来说就是程序的执行入口manin方法,将代码转换为数据流图——Dataflow,并生成作业图——JobGraph,一次发送给JobManager。提交之后任务的执行已经和客户端没什么关系了,可以在客户端选择断开与JobManager的连接,也可以保持连接。客户端随时可以连接到JobManager,获取当前作业的状态和结果,也可以取消作业;JobManager和TaskManager可以以不同的方式启动;

  • 作为独立——Standalone集群的进程,直接在机器上启动
  • 在容器中启动
  • 有资源管理平台调度启动,比如 YARN、K8S

这其实对应了不用的启动方式:TaskManager 启动之后,JobManager与其建立连接,并将作业图转换为执行图分发给TaskManager。然后由TaskManager具体执行任务

2、JobManager.

JobManager是一个集群中任务管理和调度中心,是控制任务执行的主进程,每个应用都有一个JobManager所控制执行,当然,在高可用场景下可能会出现多个JobManager;这时只有一个正在运行的leader,备用接待您是standby,JobManager由三个组件:

1、JobMaster:obMaster是JobManager中最核心的组件,负责处理单独的作业(Job)。所以JobMaster和具体的Job是一一对应的,多个Job可以同时运行在一个Flink集群中, 每个Job都有一个自己的JobMaster。需要注意在早期版本的Flink中,没有JobMaster的概念;而JobManager的概念范围较小,实际指的就是现在所说的JobMaster。在作业提交时,JobMaster会先接收到要执行的应用。这里所说“应用”一般是客户端提交来的,包括:Jar包,数据流图(dataflow graph),和作业图(JobGraph)。JobMaster会把JobGraph转换成一个物理层面的数据流图,这个图被叫作“执行图”(ExecutionGraph),它包含了所有可以并发执行的任务。JobMaster会向资源管理器(ResourceManager)发出请求,申请执行任务必要的资源。一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的TaskManager上。而在运行过程中,JobMaster会负责所有需要中央协调的操作,比如说检查点(checkpoints)的协调。

2. 资源管理器(ResourceManager):ResourceManager主要负责资源的分配和管理,在Flink 集群中只有一个。所谓“资源”,主要是指TaskManager的任务槽(task slots)。任务槽就是Flink集群中的资源调配单元,包含了机器用来执行计算的一组CPU和内存资源。每一个任务(Task)都需要分配到一个slot上执行。这里注意要把Flink内置的ResourceManager和其他资源管理平台(比如YARN)的ResourceManager区分开。Flink的ResourceManager,针对不同的环境和资源管理平台(比如Standalone部署,或者YARN),有不同的具体实现。在Standalone部署时,因为TaskManager是单独启动的(没有Per-Job模式),所以ResourceManager只能分发可用TaskManager的任务槽,不能单独启动新TaskManager。而在有资源管理平台时,就不受此限制。当新的作业申请资源时,ResourceManager会将有空闲槽位的TaskManager分配给JobMaster。如果ResourceManager没有足够的任务槽,它还可以向资源提供平台发起会话,请求提供启动TaskManager进程的容器。另外,ResourceManager还负责停掉空闲的TaskManager,释放计算资源。

3. 分发器(Dispatcher)Dispatcher主要负责提供一个REST接口,用来提交应用,并且负责为每一个新提交的作业启动一个新的JobMaster 组件。Dispatcher也会启动一个Web UI,用来方便地展示和监控作业执行的信息。Dispatcher在架构中并不是必需的,在不同的部署模式下可能会被忽略掉。

3、TaskManager

askManager是Flink中的工作进程,数据流的具体计算就是它来做的,所以也被称为“Worker”。Flink集群中必须至少有一个TaskManager;当然由于分布式计算的考虑,通常会有多个TaskManager运行,每一个TaskManager都包含了一定数量的任务槽(task slots)。Slot是资源调度的最小单位,slot的数量限制了TaskManager能够并行处理的任务数量。启动之后,TaskManager会向资源管理器注册它的slots;收到资源管理器的指令后,TaskManager就会将一个或者多个槽位提供给JobMaster调用,JobMaster就可以分配任务来执行了。在执行过程中,TaskManager可以缓冲数据,还可以跟其他运行同一应用的TaskManager交换数据。

标签:JobMaster,架构,ResourceManager,JobManager,Flink,系统,TaskManager,执行
来源: https://www.cnblogs.com/wdh01/p/16367361.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有