articleList

07-深入Flink整体架构原理和组件角色介绍

2025/03/13 posted in  Flink
Tags: 

40805013.png

  • Flink 是一个分布式系统,需要有效分配和管理计算资源才能执行流应用程序

    • 运行时由两种类型的进程组成
      • 一个 JobManager
      • 一个或者多个 TaskManager
        40905907.png
  • 什么是JobManager(大Boss,包工头)

    • 协调 Flink 应用程序的分布式执行的功能
      • 它决定何时调度下一个 task(或一组 task)
      • 对完成的 task 或执行失败做出反应
      • 协调 checkpoint、并且协调从失败中恢复等等
  • 什么是TaskManager (任务组长,搬砖的人)

    • 负责计算的worker,还有上报内存、任务运行情况给JobManager等
    • 至少有一个 TaskManager,也称为 worker执行作业流的 task,并且缓存和交换数据流
    • 在 TaskManager 中资源调度的最小单位是 task slot
  • Jobmanager进阶

    • JobManager进程由三个不同的组件组成
      • ResourceManager
        • 负责 Flink 集群中的资源提供、回收、分配 - 它管理 task slots
      • Dispatcher
        • 提供了一个 REST 接口,用来提交 Flink 应用程序执行
        • 为每个提交的作业启动一个新的 JobMaster
        • 运行 Flink WebUI 用来提供作业执行信息
      • JobMaster
        • 负责管理单个JobGraph的执行,Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster
        • 至少有一个 JobManager,高可用(HA)设置中可能有多个 JobManager,其中一个始终是 leader,其他的则是 standby
  • TaskManager 进阶

    • TaskManager中 task slot 的数量表示并发处理 task 的数量
    • 一个 task slot 中可以执行多个算子,里面多个线程
      • 算子 opetator
        • source
        • transformation
        • sink
    • 对于分布式执行,Flink 将算子的 subtasks 链接成 tasks,每个 task 由一个线程执行
      • 图中source和map算子组成一个算子链,作为一个task运行在一个线程上
    • 将算子链接成 task 是个有用的优化:它减少线程间切换、缓冲的开销,并且减少延迟的同时增加整体吞吐量
      41214513.png
      41226022.png
  • 官方文档:https://ci.apache.org/projects/flink/flink-docs-release-1.13/zh/docs/learn-flink/overview/

  • Task Slots 任务槽

    • Task Slot是Flink中的任务执行器,每个Task Slot可以运行多个subtask ,每个subtask会以单独的线程来运行
    • 每个 worker(TaskManager)是一个 JVM 进程,可以在单独的线程中执行一个(1个solt)或多个 subtask
    • 为了控制一个 TaskManager 中接受多少个 task,就有了所谓的 task slots(至少一个)
    • 每个 task slot 代表 TaskManager 中资源的固定子集
    • 注意
      • 所有Task Slot平均分配TaskManger的内存, TaskSolt 没有 CPU 隔离
      • 当前 TaskSolt 独占内存空间,作业间互不影响
      • 一个TaskManager进程里有多少个taskSolt就意味着多少个并发
      • task solt数量建议是cpu的核数,独占内存,共享CPU
        41315466.png
    • 5 个 subtask 执行,因此有 5 个并行线程
      • Task 正好封装了一个 Operator 或者 Operator Chain 的 parallel instance
      • Sub-Task 强调的是同一个 Operator 或者 Operator Chain 具有多个并行的 Task
      • 图中source和map算子组成一个算子链,作为一个task运行在一个线程上
        • 算子链接成 一个 task 它减少线程间切换、缓冲的开销,并且减少延迟的同时增加整体吞吐量
          41389630.png
    • Task Slot是Flink中的任务执行器,每个Task Slot可以运行多个task即subtask ,每个sub task会以单独的线程来运行
      41417352.png
    • Flink 算子之间可以通过【一对一】模式或【重新分发】模式传输数据
      41444695.png
  • 文档