flink学习 (2) 架构

flink 运行时的组件

任务管理器TaskManager

flink的工作进程。通常在Flink中会有多个TaskManager运行,每一个TaskManager都包含了一定数量的插槽(slots)。插槽的数量限制了TaskManager能够执行的任务数量。

启动之后,TaskManager会向资源管理器注册它的插槽;收到资源管理器指令后,TaskManager就会将一个或多个插槽提供给JobManager调用。JonbManager就可以向插槽分配任务来执行。

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

资源管理器 ResourceManager

主要负责管理务管理器的插槽slot,TaskManager插槽是Flink中定义的处理资源单元。

Flink为不同的环境和资源管理工具提供了不同资源管理器,如YARN、mesos、K8s,以及standalone部署。

当JobManager申请插槽资源时,ResourceManager会将有空闲插槽的TaskManager分配给JobManager。如果ResourceManager没有足够的插槽满足JobManager请求,它还可以向资源提供平台发起会话,以提供启动TaskManager进程的容器。

分发器 Dispatcher

可以跨作业运行,它为应用提供了Rest接口。

当一个应用被提交执行时,分发器就会启动并将应用移交给JobManager。

Dispatcher也会

启动一个 Web UI 用来方便地展示和监控作业执行的信息。

Dispatcher在架构中可能并不是必需的,这取决于应用提交运行的方式。

standalone 模式    flink 任务提交流程

任务提交流程(YARN)

任务调度原理

TaskManager和slots

TaskManager可以看做一个进程 Task on slot 可以看作一个线程

每一个线程执行在固定的计算资源上,这个资源就是slot

slot之间内存不共享 cpu共享

所以slot数量配成cpu核心数 可以更好的提高cpu利用率

并行:

数据并行:同一个任务,不同的并行子任务,同时处理不同的数据

任务并行:同一时间,不同的slot在执行不同的任务

数据传输形式

一个程序中,不同的算子可能有不同的并行度

算子之间传输数据的形式可以是one-to-one(forwarding)的模式亦可以是redistributing的模式,具体是哪一种,取决于算子的种类

one-to-one:stream维护着分区以及元素的顺序。(如source 和 map 算子之间) 这意味着map的算子的子任务看到元素个数以及顺序跟source算子的子任务生产的元素的个数,顺序相同。map,filter,flatmap等算子都是one-to-one的对应关系

redistributing:stream的分区会发生改变,每一个算子的子任务 依据所选择的 transformation发送数据到不同的目标任务。 如 :keyby算子会基于hashcode重分区,而brodcast和reblance会随机重新分区,这些算子都会引起redistribute过程,而redistribute过程就类似于spark中的shuffle过程。

和spark的窄依赖和宽依赖类似  窄依赖且 相同并行度的 的可以合并在一起执行 宽依赖的 不行

这个是flink 的任务链优化技术

taskManager和slot数量决定了 并行处理的最大能力

但是不一定程序执行时一定都能用到。程序执行时的并行度才是用到的能力。

猜你喜欢

转载自blog.csdn.net/a724952091/article/details/106736332