大数据(9c)Flink运行架构

文章目录

〇运行架构图

大数据(9c)Flink运行架构

1、Client(客户端)

  • 客户端 用于 准备和发送dataflow到JobManager
  • 狭义的讲,客户端不是运行和程序执行的一部分
    客户端可以断开与JobManager的连接(detached mode)
    也可以继续保持与JobManager的连接(attached mode)

2、JobManager(作业管理器)

  • 控制一个应用程序执行的主进程
  • JobManager会先接收到要执行的应用程序,该应用程序包括:
    作业图(JobGraph)
    逻辑数据流图(logical dataflow graph)
    打包了的JAR
  • JobManager会把JobGraph转换成一个物理层面的数据流图(ExecutionGraph),ExecutionGraph包含了所有可以并发执行的任务。
    JobManager会向资源管理器请求执行任务必要的资源,也就是任务管理器(TaskManager)上的插槽(slot)。
    资源足够,就会将执行图分发到真正运行它们的TaskManager上。
  • 在运行过程中,JobManager会负责所有需要*协调的操作,比如:检查点(checkpoints)的协调

2.1、ResourceManager(资源管理器)

  • 整个Flink集群中只有一个ResourceManager

  • 负责资源的管理
    主要管理任务管理器(TaskManager)的插槽(Slot)
    插槽是Flink中定义的处理资源单元

  • 分配
    有空闲插槽的TaskManager给JobManager

  • 终止
    空闲的TaskManager以释放资源

这个ResourceManager和YARN的碰巧重名,但不是一回事

2.2、Dispatcher(调度器)

  • 负责接收用户提供的作业,并负责为这个新提交的作业启动一个新的JobMaster
  • Dispatcher会启动一个Web UI,来展示和监控作业执行的信息
  • Dispatcher并非必需的,这取决于应用提交运行的方式

2.3、JobMaster(作业主控器)

  • JobMaster负责管理单个JobGraph的执行
  • 多个Job可以同时运行在一个Flink集群中,每个Job都有一个自己的JobMaster

3、TaskManager

  • Flink中的工作进程

  • TaskManager向资源管理器注册自己的插槽;
    收到资源管理器的指令后,TaskManager就会将插槽提供给JobManager调用,JobManager就可以向插槽分配任务(tasks)来执行了

  • 通常会有多个TaskManager运行,每个TaskManager都包含了一定数量的插槽
    插槽的数量限制了TaskManager能够执行的任务数量

  • 在执行过程中,一个TaskManager可以跟其它运行同一应用程序的TaskManager交换数据。

大数据(9c)Flink运行架构

3.1、Slot(插槽)

  • Flink中每一个TaskManager都是一个JVM进程,通过TaskSlot来控制TaskManager能接收多少个Task(1个TaskManager至少有1个TaskSlot)

  • 每个TaskSlot表示TaskManager拥有资源的一个固定大小的子集。
    插槽不隔离CPU,只隔离内存

例如:
1个TaskManager有3个插槽,那么TaskManager管理的内存会分成3份给各个插槽
资源插槽化意味着一个Task不需要和其它Job的Task竞争被管理的内存

3.2、Task、SubTask、Operator

  • 1个算子的并行度=这个Task的SubTask数量

并行度
大数据(9c)Flink运行架构

流数据传输形式 说明 示例算子 类比
One-to-one 分区没有改变 mapfliterflatMap Spark的窄依赖
Redistributing 分区会发生改变 keyBybroadcastrebalance Spark的宽依赖

Operator Chains
大数据(9c)Flink运行架构
相同并行度的One-to-one操作,Flink将这样相连的算子链接在一起形成一个Task,原来的算子成为里面的一部分。 每个task被一个线程执行.

3.3、图

3.3.1、StreamGraph(逻辑流图)

  • 由Flink程序直接映射而成
  • 也称逻辑流图
  • 表示 计算逻辑

3.3.2、ExecutionGraph(执行图)

  • 为了执行一个流处理程序,需要将逻辑流图转换为物理流图
StreamGraph JobGraph ExecutionGraph PhysicalGraph
四层 说明 备注
StreamGraph 代码生成的最初的图 表示程序的拓扑结构。
JobGraph 将多个符合条件的节点,链接为一个节点 可减少数据在节点之间流动所需要的序列化/反序列化/传输消耗
ExecutionGraph JobGraph的并行化版本 是调度层最核心的数据结构
PhysicalGraph JobManager根据ExecutionGraph对Job进行调度后,在各个TaskManager上部署Task后形成的“图” 并不是一个具体的数据结构。
env.socketTextStream().flatMap(…).keyBy(0).sum(1).print();

上面这一行代码,并发度=2(Source为1个并发度)的执行图四层演变过程
大数据(9c)Flink运行架构

Appendix

en

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

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

ICode9版权所有

上一篇:Table API&SQL的基本概念及使用介绍


下一篇:.net后台调用API接口