这是我参与「第四届青训营」笔记创作活动的第5天
Flink概述
大数据(Big Data):指无法在一定时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合。
大数据计算机架构
graph TD
2006及以前--> Hadoop --> Spark --> Flink
实时性 --> 流式计算(Flink 流批一体)
Flink整体架构
2.1 Flink的分层架构
2.2 Flink总体架构
两个核心组件:JobManager和TaskManager
JM:负责整个任务的协调工作,包括:调度task、触发协调Task做Checkpoint、协调容错恢复等。
TM:负责执行一个DataFlow Graph的各个task以及data streams的buffer和数据交换
Dispatcher:接收作业,拉起JM来执行作业,并在JM挂掉之后恢复作业
Job Manager:管理一个job的生命周期,向ResourceManager申请slot,并将task调度到对应的TM上
ResourceManager:负责slot资源的管理和调度,TM拉起之后会向RM注册
2.3 Flink作业示例
2.4 Flink如何做到流批一体?
流/批的区别(此处是表格)
| --- | 流式计算 | 批式计算 |
| 数据流 | 无限 | 有限 |
| 时延 | 低延迟,业务会感知运行情况 | 实时性要求低,只关注最终结果产出时间 |
|业务场景|广告推荐、金融风控 | 搜索引擎构建索引、批式数据分析 |
如何实现流批一体?
- Everything is Streams 一套引擎架构解决两种场景。
可从以下几个模块做到流批一体:
- SQL层
- DataStream API层统一
- Scheduler层架构统一
- Failover Recovery架构统一
- Shuffle Service层架构统一,流/批场景选择不同的Shuffle Service
3.流批一体的Scheduler层
- Scheduler主要负责将作业的DAG转化为在分布式环境中可以执行的Task
- 两种调度模式
5.流批一体的Shuffle Service层
- Shuffle:实际上,分布式计算中所有涉及到上下游衔接的过程,都可以理解为Shuffle
- 两种实现:
- 基于文件的Pull Based Shuffle,如Spark或MR。具有较高的容错性,适合大规模批作业处理
- 基于Pipeline的Push Based Shuffle,如Flink、Storm、Presto等,它 低延迟、高性能
- 流/批差异:
-
- Shuffle数据的生命周期:流的Shuffle与Task绑定,批是解耦的。
-
- 存储介质:流(实时)-->内存 批(大/容错)-->磁盘
-
- 部署方式:流的Shuffle服务和计算节点部署在一起,可以减少网络开销,从而减少latency,而批则不同。
小结:Flink提供一套统一的Shuffle架构,兼顾流与批的个性与共性
- 在Streaming和OLAP场景:为了性能的需要,通常会使用基于Pipeline的Stuffle
- 在Batch场景:一般选择Blocking的Shuffle模式
经过以上改造,Flink已经针对DataStream层、调度层。Shuffle Service层均完成了对流和批的支持。
Flink架构优化
3.1流/批/OLAP(交互式分析)业务场景概述
3.2为什么三套可以用一套引擎
- Everything is Stream
- OLAP是特殊批,只是对并发和实时性要求更高
3.3 Flink的OLAP优化之路
- Flink做OLAP的优势
- Flink做OLAP场景的挑战
- Flink OLAP架构现状
- Flink在OLAP架构的问题与设想
写在最后:
本文如有任何错误,欢迎批评指正~
内容主要参考了青训营王蒙老师流/批/OLAP一体的Flink引擎的PPT