流/批/OLAP一体的Flink引擎(01) | 青训营笔记

188 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第3天

本节主要内容:

  • Flink概述
  • Flink整体架构
  • Flink架构优化
  • 精选案例讲解

1.Flink概述

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

1.1 Flink的特点

  • 支持高性能,高吞吐,低延迟的数据流处理
  • 事件驱动
  • 分层的API
  • 精确一次(Exactly-Once)的一致性保证。(数据不多不少刚好被执行一次)
  • 乱序数据的处理

1.2几种流式计算引擎比较

image.png 图片来源:流_批_OLAP 一体的 Flink 引擎 - 王蒙 - ppt.pptx - 飞书文档 (feishu.cn)

2.Flink整体架构

2.1分层架构

image.png

图片来源:流_批_OLAP 一体的 Flink 引擎 - 王蒙 - ppt.pptx - 飞书文档 (feishu.cn)

如上图所示,主要分为以下几层:

  • SDK层:(灰色三类)
  • Runtime层:执行引擎层提供了统一的DAG,用来描述数据处理的Pipeline,不管是流还是批,都会转化为 DAG图,调度层再把DAG转化成分布式环境下的Task, Task 之间通过Shuffle传输数据;
  • 状态存储层:负责存储算子的状态信息;
  • 资源调度层:目前Flink可以支持部署在多种环境。

2.2总体框架

主要包括:JobManager和TaskManager

2.2.1JobManager

示意图:

image.png

职责:

  • Dispatcher:接收作业,拉起JobManager来执行作业,并在JobMaster挂掉之后恢复作业;
  • JobMaster:管理一个job的整个生命周期,会向ResourceManager申请slot,并将task调度到对应TM上;
  • ResourceManager:负责slot资源的管理和调度,Task manager拉起之后会向RM注册;

2.2.2TaskManager

示意图:

image.png

职责:

  • 负责执行一个DataFlow Graph的各个task以及data streams的buffer和数据交换。

2.3作业示例

  • Flink 作业示例(Overview | Apache Flink
  • ExecutionGraph 生成:DataStream API Code --> JobGraph --> ExecutionGraph(Parallelized)