乐趣区

关于大数据:大数据开发Flink体系结构-运行架构

Flink 体系结构以及次要组成

像大多数大数据框架一样,Flink 是十分经典的 Master/Slave 构造实现,JobManager 是 Master,TaskManager 是 Slave。

JobManager 处理器(Master)

协调分布式执行,它们用来调度 task,协调检查点(CheckPoint),协调失败时复原等,Flink 运行时至多存在一个 master 处理器,如果配置高可用模式则会存在多个 master 处理器,它们其中有一个是 leader,而其余的都是 standby。JobManager 接管的利用包含 jar 和 JobGraph。

TaskManager 处理器(Slave)

处理器也称之为 Worker,主要职责是从 JobManager 处接管工作, 并部署和启动工作, 接管上游的数据并解决,Task Manager 是在 JVM 中的一个或多个线程中执行工作的工作节点,TaskManager 在启动的时候会向 ResourceManager 注册本人的资源信息(Slot 的数量等)。

ResourceManager

针对不同的环境和资源提供者,如(YARN,Me 搜寻,Kubernetes 或独立部署),Flink 提供了不同的 ResourceManager, 其作用是负责 Flink 的资源处理单元:slot, 能够了解为 cpu 和内存资源

Dispatcher

提供一个 REST 接口来让咱们提交须要执行的利用。一旦一个利用提交执行,Dispatcher 会启动一个 JobManager,并将利用转交给他。Dispatcher 还会启动一个 webUI 来提供无关作业执行信息
留神:某些利用的提交执行的形式,有可能用不到 Dispatcher。

下面各个组件的关系,能够参考下图:

Flink 运行架构

运行架构与体系结构的区别是,体系结构次要指 Flink 在实体机器上的体现,是由什么过程,整个流程体系如何,而运行架构指的是一个程序提交后,走了哪些形象流程

Flink 程序结构

Flink 程序的根本构建块是流和转换(请留神,Flink 的 DataSet API 中应用的 DataSet 也是外部流)。从概念上讲,流是(可能永无止境的)数据记录流,而转换是将一个或多个流输出,并产生一个或多个输入流


上图表述了 Flink 的应用程序构造,有 Source(源头)、Transformation(转换)、Sink(接收器)三个重要组成部

Source
数据源,定义 Flink 从哪里加载数据,Flink 在流解决和批处理上的 source 大略有 4 类:基于本地汇合的
source、基于文件的 source、基于网络套接字的 source、自定义的 source。自定义的 source 常见的有
Apache kafka、RabbitMQ 等。
Transformation
数据转换的各种操作,也称之为算子,有 Map / FlatMap / Filter / KeyBy / Reduce / Window 等,能够将数据
转换计算成你想要的数据。
Sink
接收器,Flink 将转换计算后的数据发送的地点,定义了后果数据的输入方向,Flink 常见的 Sink 大略有如下几
类:写入文件、打印进去、写入 socket、自定义的 sink。自定义的 sink 常见的有 Apache kafka、
RabbitMQ、MySQL、ElasticSearch、Apache Cassandra、HDFS 等。

Task 和 SubTask

  • Task 是一个阶段多个性能雷同 SubTask 的汇合,相似于 Spark 中的 TaskSet。
  • SubTask(子工作)

SubTask 是 Flink 中工作最小执行单元,是一个 Java 类的实例,这个 Java 类中有属性和办法,实现具体的计算
逻辑,比方一个执行操作 map,分布式的场景下会在多个线程中同时执行,每个线程中执行的都叫做一个
SubTask

Operator chain(操作器链)

Flink 的所有操作都称之为 Operator,客户端在提交工作的时候会对 Operator 进行优化操作,能进行合并的 Operator
会被合并为一个 Operator,合并后的 Operator 称为 Operator chain,实际上就是一个执行链,每个执行链会在
TaskManager 上一个独立的线程中执行。shuffle

Flink 中的数据传输

在运行过程中,利用中的工作会继续进行数据交换。为了无效利用网络资源和进步吞吐量,Flink 在解决工作间的数据传输过程中,采纳了缓冲区机制

工作槽和槽共享

工作槽也叫做 task-slot、槽共享也叫做 slot sharing


每个 TaskManager 是一个 JVM 的过程, 能够在不同的线程中执行一个或多个子工作。为了管制一个 worker 能接管多少个 task。worker 通过 task slot 来进行管制(一个 worker 至多有一个 task slot)

  • 工作槽

    • 每个 task slot 示意 TaskManager 领有资源的一个固定大小的子集。一般来说: 咱们调配槽的个数都是和 CPU 的核

数相等, 比方 6 核, 那么就调配 6 个槽.
Flink 将过程的内存进行了划分到多个 Slot 中。假如一个 TaskManager 机器有 3 个 slot,那么每个 slot 占有 1 / 3 的内
存(平分)。

  • 内存被划分到不同的 slot 之后能够取得如下益处:

TaskManager 最多能同时并发执行的工作是能够管制的,那就是 3 个,因为不能超过 slot 的数量
slot 有独占的内存空间,这样在一个 TaskManager 中能够运行多个不同的作业,作业之间不受影

  • 槽共享

    默认状况下,Flink 容许子工作 subtast(map[1] map[2] keyby[1] keyby[2] 共享插槽,即便它们是不同工作的

子工作,只有它们来自同一个作业。后果是一个槽能够保留作业的整个管道


吴邪,小三爷,混迹于后盾,大数据,人工智能畛域的小菜鸟。
更多请关注

退出移动版