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 任务提交流程

 

flink学习 (2) 架构

任务提交流程(YARN)

 

 

flink学习 (2) 架构

任务调度原理

 

flink学习 (2) 架构

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 的任务链优化技术

 

相关文章:

  • 2021-06-19
  • 2021-08-24
  • 2022-12-23
  • 2021-11-29
  • 2021-09-15
  • 2022-12-23
  • 2021-09-04
  • 2021-05-31
猜你喜欢
  • 2021-08-11
  • 2021-06-21
  • 2022-01-17
  • 2021-09-24
  • 2022-12-23
  • 2022-01-05
  • 2021-05-25
相关资源
相似解决方案