Flink 运行时架构

打印 上一主题 下一主题

主题 529|帖子 529|积分 1587

Flink 运行时的组件




  • 作业管理器(JobManager)
  • 资源管理器(ResourceManager)
  • 任务管理器(TaskManager)
  • 分发器(Dispatch)
JobManager



  • 控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的 JobManager 所控制执行;
  • JobManager 会先吸收到要执行的应用程序,这个应用程序,这个应用程序包括作业图(JobGraph)、逻辑数据流图(logical dataflow graph)和打包了全部类、库和其他资源的JAR包;
  • JobManager 会把 JobGraph 转换成一个物理层面的数据流图,这个图叫做执行图(ExecutionGraph),包罗了全部可以并发执行的任务;
  • JobManager 会向 ResourceManager 请求执行任务必要的资源,也就是 TaskManager 上的 slot 。一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的 TaskManager 上。而在运行过程中,JobManager 会负责全部需要中心协调的操纵,比如所 checkpoint 的协调;
ResourceManager



  • 重要负责管理 TaskManager 和 slot;
  • Flink 为不同环境和资源管理工具提供了不同的 ResourceManager,比如Yarn、Mesos、K8s,以及 standalone部署;
  • 当 JobManager 申请 slot 资源时,ResourceManager 会将有空闲 slot 的 TaskManager 分配给 JobManager。假如 ResourceManager 没有足够的 slot 来满足 JobManager 的请求,它还可以向资源提供平台发起会话,以提供启动 TaskManager 进程的容器;
TaskManager



  • Flink 中的工作进程。通常在 Flink 中会有多个 TaskManager 运行,每一个 TaskManager 都包罗一定数量的 slot 。slot 的数量限制了 TaskManager 可以大概执行的任务数量(并行度);
  • 启动之后,TaskManager 会向 ResourceManager 注册它的 slot ;收到 ResourceManager 的指令后,TaskManager 就会将一个或者多个 slot 提供给 JobManager 调用。JobManager 就可以向 slot 分配任务来执行了;
  • 在执行过程中,一个 TaskManager 可以跟其他运行同一应用程序的 TaskManager 互换数据;
Dispatcher



  • 可以跨作业运行,它为应用提交提供了 REST 接口;
  • 当一个应用被提交时,Dispatcher 就会启动并将应用移交给一个 JobManager;
  • Dispatcher 也会启动一个 Web UI,用来方便地展示和监控作业执行的信息;
  • Dispatcher 在架构中大概并不是必需的,这取决于应用提交的方式;
Flink 任务提交流程



  • 当程序执行 execute() 方法时,Client 会将程序编译成一个 DAG(有向无环图),这个图被称为 JobGraph ,JobGraph 形貌了程序的数据流和操纵;
  • Dispatcher 将 JobGraph 提交给 JobManager;
  • JobManager 吸收到 JobGraph 后会将其剖析,并创建一个 ExecutionGraph,ExecutionGraph 形貌了如安在集群中并行执行 JobGraph 中界说的数据流;
  • JobManager 根据 ExecutionGraph 的需求向 ResourceManager 请求资源;
  • 一旦资源被分配,JobManager 会将作业分解成一系列的 Task ,然后将这些 Task 分配给集群中 TaskManager ,每个 TaskManager 执行一个或多个 Task;
  • TaskManager 吸收到 Task 后会在本地执行它们;
  • TaskManager 会定期保存状态快照,并向 JobManager 陈诉任务的进度和状态;
  • 当全部 Task 都乐成执行完毕,JobManager 会标记作业为完成,而且释放全部分配的资源;
以上是从一个较为高级的视角,来看应用中各组件的交互协作。假如部署的集群环境不同,此中一些步调可以省略,或是有些组件会运行在同一个 JVM 进程中。
下面以详细部署到 Yarn 上为例:


  • Flink 提交任务后,Client 向 HDFS 上传 Flink 的 Jar 包和配置;
  • Client 向 ResourceManager 提交任务,ResourceManager 分配 Container 资源并关照对应的 NodeManager 启动 ApplicationMaster,ApplicationMaster 启动后加载 Flink 的 Jar 包和配置构建环境,然后启动 JobManager;
  • ApplicationMaster 向 ResouceManager 申请资源启动 TaskManager;
  • ResourceManager 分配 Container 资源后,由 ApplicationMaster 关照资源所在节点的 NodeManager 启动 TaskManager;
  • TaskManager 加载 Flink 的 Jar包和配置构建环境并启动 TaskManager;
  • TaskManager 启动后向 JobManager 发送心跳包,并等待 JobManager 向其分配任务;

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

耶耶耶耶耶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表