浅墨散人 浅墨散人
  • 基础
  • 设计模式
  • JVM
  • Maven
  • SpringBoot
  • 基础
  • Flask
  • Diango
  • Pandas
  • SqlAlchemy
  • Sqoop
  • Flume
  • Flink
  • Hadoop
  • Hbase
  • Hive
  • Kafka
  • Kylin
  • Zookeeper
  • Tez
  • MySQL
  • Doris
  • Chrome
  • Eclipse
  • IDEA
  • iTerm2
  • Markdown
  • SublimeText
  • VirtualBox
  • WebStrom
  • Linux
  • Mac
  • Hexo
  • Git
  • Vue
  • VuePress
  • 区块链
  • 金融
数据仓库
数据治理
读书笔记
关于我
GitHub (opens new window)
  • 基础
  • 设计模式
  • JVM
  • Maven
  • SpringBoot
  • 基础
  • Flask
  • Diango
  • Pandas
  • SqlAlchemy
  • Sqoop
  • Flume
  • Flink
  • Hadoop
  • Hbase
  • Hive
  • Kafka
  • Kylin
  • Zookeeper
  • Tez
  • MySQL
  • Doris
  • Chrome
  • Eclipse
  • IDEA
  • iTerm2
  • Markdown
  • SublimeText
  • VirtualBox
  • WebStrom
  • Linux
  • Mac
  • Hexo
  • Git
  • Vue
  • VuePress
  • 区块链
  • 金融
数据仓库
数据治理
读书笔记
关于我
GitHub (opens new window)
  • Flink

    • 目录
    • 核心概念
    • 快速开始
    • 部署方式
    • 运行时架构
      • 运行时组件
        • ResourceManager
        • JobManager
        • TaskManager
        • Dispatcher
    • API
    • Flink SQL
    • Flink 相关配置
    • 项目实战
  • BigData
  • Flink
2021-10-05
目录

运行时架构

  • 运行时组件
    • ResourceManager
    • JobManager
    • TaskManager
    • Dispatcher

# 运行时组件

Flink运行时主要有4个组件,具体如下:

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

# ResourceManager

主要负责TaskManager的slot(插槽),slot是Flink中处理资源的单元。Flink为不同的环境和资源管理工具提供了不同资源管理器。当JobManager申请插槽资源的时候,ResourceManager会将有空闲插槽的TaskManager分配给JobManager。如果没有足够的插槽,可以向资源提供平台发起会话,以提供启动TaskManager进程的容器。还负责终止空闲的TaskManager,释放计算资源。

# JobManager

协调分布式计算,负责调度任务、协调 checkpoints、协调故障恢复等。每个 Job 至少会有一个 JobManager。高可用部署下会有多个 JobManagers,其中一个作为 leader,其余处于 standby 状态。

每个应用程序都会被一个不同的JobManager所控制执行,是控制每一个应用程序执行的主进程。JobManager接收要执行的应用程序,包括作业图(JobGraph)、逻辑数据流图(logical dataflow graph)和打包了所有的类、库和其它资源的JAR包等。JobManager将JobGraph转换成物理层面的数据流图也叫执行图(ExecutionGraph),执行图包含了所有可以并行进行执行的任务。当JobManager向资源管理器请求完执行任务需要的资源(TaskManager上的slot)时就会将执行图分发到真正运行它们的TaskManager上,JobManager还需要负责所有需要中央协调的操作。

主要工作内容

  1. 接收提交过来的应用程序(作业图,逻辑数据图)

# TaskManager

用来执行 dataflow 中的 tasks(准确来说是 subtasks ),并且缓存和交换数据 streams。每个 Job 至少会有一个 TaskManager。

每一个TaskManager都包含了一定数量的插槽(slots)。插槽的数量限制了TaskManager能够执行的任务数量。每当TaskManager启动后都会向资源管理器注册它的插槽。当资源管理器向它发出提供slot指令后TaskManager就会将一个或者多个插槽提供给JobManager调用,JobManager就可以向插槽分配任务(tasks)来执行了。在执行过程中,同一应用程序的TaskManager之间可以交换数据。

Flink 运行时由两种类型的进程组成:一个 JobManager 和一个或者多个 TaskManager。

# Dispatcher

Dispatcher为应用提交提供了REST接口。当一个应用被提交执行时,分发器就会启动并将应用移交给一个JobManager,可以跨作业运行。Dispatcher是REST接口,所以可以作为集群的一个HTTP接入点,这样就能够不受防火墙阻挡。Dispatcher也会启动一个Web UI,用来方便地展示和监控作业执行的信息。Dispatcher在架构中可能并不是必需的,这取决于应用提交运行的方式。

2 任务提交流程   当一个任务提交时,较高层次的各运行时组件的交互如下:

(1)客户端提交应用

(2)分发器就会启动并将应用移交给一个JobManager

(3)JobManager向ResourceManager申请slots

(4)ResourceManager启动TaskManager

(5)TaskManager启动后向ResourceManager注册slots

(6)ResourceManager向TaskManager发出提供slot的指令

(7)TaskManager向JobManager提供slots

(8)JobManager在TaskManager提供的slots中提交要执行的任务

(9)在执行任务过程中TaskManager之间交互数据

当部署的集群环境不同(YARN,Mesos,Kubernetes,standalone等),上述步骤会有所不同,如果我们将Flink集群部署到YARN上,提交流程如下:

(1)Client首先把jar包和配置上传到hdfs里

(2)Client提交job到ResourceManager

(3)ResourceManager分配container资源,通知对应的NodeManager启动ApplicationMaster

(4)ApplicationMaster启动后加载jar包和配置构建环境,启动JobManager

(5)ApplicationMaster向ResourceManager申请启动TaskManager

(6)ResourceManager分配container之后,ApplicationMaster通知资源所在节点的NodeManager启动TaskManager

(7)NodeManager加载jar包和配置构建环境,并启动TaskManager

(8)TaskManager启动后向jobManager发送心跳包,并等待JobManager向其分配任务

#Flink
最后更新时间: 2022/7/23 10:17:11
部署方式
API

← 部署方式 API→

最近更新
01
分区分桶
08-21
02
数据模型(重要)
08-21
03
安装和编译
08-21
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式