这是我参与「第四届青训营 」笔记创作活动的的第3天
本节主要内容:
- Flink概述
- Flink整体架构
- Flink架构优化
- 精选案例讲解
1.Flink概述
Flink一个框架和分布式的处理引擎,用于对无界和有界数据流进行状态计算。
1.1 Flink的特点
- 支持高性能,高吞吐,低延迟的数据流处理
- 事件驱动
- 分层的API
- 精确一次(Exactly-Once)的一致性保证。(数据不多不少刚好被执行一次)
- 乱序数据的处理
1.2几种流式计算引擎比较
图片来源:流_批_OLAP 一体的 Flink 引擎 - 王蒙 - ppt.pptx - 飞书文档 (feishu.cn)
2.Flink整体架构
2.1分层架构
图片来源:流_批_OLAP 一体的 Flink 引擎 - 王蒙 - ppt.pptx - 飞书文档 (feishu.cn)
如上图所示,主要分为以下几层:
- SDK层:(灰色三类)
- Runtime层:执行引擎层提供了统一的DAG,用来描述数据处理的Pipeline,不管是流还是批,都会转化为 DAG图,调度层再把DAG转化成分布式环境下的Task, Task 之间通过Shuffle传输数据;
- 状态存储层:负责存储算子的状态信息;
- 资源调度层:目前Flink可以支持部署在多种环境。
2.2总体框架
主要包括:JobManager和TaskManager
2.2.1JobManager
示意图:
职责:
- Dispatcher:接收作业,拉起JobManager来执行作业,并在JobMaster挂掉之后恢复作业;
- JobMaster:管理一个job的整个生命周期,会向ResourceManager申请slot,并将task调度到对应TM上;
- ResourceManager:负责slot资源的管理和调度,Task manager拉起之后会向RM注册;
2.2.2TaskManager
示意图:
职责:
- 负责执行一个DataFlow Graph的各个task以及data streams的buffer和数据交换。
2.3作业示例
- Flink 作业示例(Overview | Apache Flink
- ExecutionGraph 生成:DataStream API Code --> JobGraph --> ExecutionGraph(Parallelized)