Flink系统架构|青训营笔记

156 阅读3分钟

Flink系统架构|青训营笔记

1. flink简介

官方定义:

Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。

定义中主要有两个关注点:

  • 针对有界和无界数据流
  • 有状态计算

除了上述的定义之外,flink的其它特性如下所示:

  1. 支持高吞吐、低延迟、高性能的流处理
  2. 支持带有事件时间的窗口(Window)操作
  3. 支持有状态计算的 Exactly-once 语义
  4. 支持高度灵活的窗口(Window)操作,支持基于 time、count、session,以及 data-driven 的窗口操作
  5. 支持具有 Backpressure 功能的持续流模型
  6. 支持基于轻量级分布式快照(Snapshot)实现的容错
  7. Flink 在 JVM 内部实现了自己的内存管理
  8. 支持迭代计算
  9. 支持程序自动优化:避免特定情况下 Shuffle、排序等昂贵操作,中间结果有必要进行缓存

2.flink于其它引擎的效果对比

QQ截图20220812181333.png
从图中可以得知,相较于Spark Streaming的微批处理放式,flink有着更高的处理速度,而较于Storm,flink的精确一致性有好的优势,以及flink的高吞吐,甚至flink的SQL化使得flink更为普及

3.flink的架构

3.1 flink的分层架构

下图为flink的分层架构图

QQ截图20220812181941.png 1.SDK层:flink的最顶层包括有SQL/Table,DataStream,Python三个类
2.Runtime层:这一层提供了统一的DAG,用来描述处理数据的Pipeline,并转化为DAG图,调度层再把DAG转化为分布式环境下的TASK,其之间通过Shuffle传输数据
3.状态存储层:负责存储算子的状态信息
4.资源调度层:目前flink可以部署在多种环境下

3.2 flink的整体架构

在flink的整体架构中,主要包括有JobManger和TaskManger两个核心组件,接下来针对这两个核心组件进行详细介绍。 flink整体架构图:

QQ截图20220812182623.png

3.2.1 JobManger

Flink遵循Master-Slave原则,JobManager为Master节点,TaskManager为Slave节点.

  • 作为主进程(Master Process),JobManager控制着单个应用程序的执行,也就是每个应用都由一个不同的JobManager管理。
  • JobManager可以接受需要执行的应用,该应用会包含一个所谓的Job Graph(任务图),即逻辑Dataflow Graph(数据流图),以及一个打包了全部所需类、库以及其他资源的JAR文件。
  • JobManager将JobGraph转化为名为Execution Graph(执行图)的物理Dataflow Graph,其中包含了所有可以并发实行的任务。
  • JobManager会从ResourceManager申请执行任务的必要资源——TaskManager slot,一旦它收到了足够数量的TaskManager slot,它就会将Execution Graph中的任务分发给TaskManager来执行。在执行过程中,JobManager还要负责所有需要集中协调的操作,如创建CheakPoint等。

3.2.2 TaskManger

  • TaskManager是Flink的工作进程(Worker Process),在Flink的搭建过程中要启动多个TaskManager。每个TaskManager提供一定数量的slot(处理槽),slot的数量限制了TaskManager可执行的任务数。
  • TaskManager在启动之后会向ResourceManager注册它的slot,当接收到ResourceManager的指示时,TaskManager会向JobManager提供一个或者多个slot。之后JobManager就可以向slot中分配任务来执行。
  • 在执行过程中,运行同一应用的不同任务的TaskManager之间会产生数据交换。