这是我参与[第四届青训营]笔记创作的第2天。
一、Flink概述
1、大数据计算架构发展历史
Q:为什么需要流式计算?
A: 大数据实时性带来价值更大。例如在金融风控中,如果实时监测出异常交易行为,就能及时阻断风险发生。在抖音根据用户行为数据发掘用户兴趣、偏好,向用户推荐更感兴趣的内容。
2、流式计算框架对比
Q:为什么Flink脱颖而出?
- Exactly——Once语句
- 状态容错 checkpoint
- Dataflow编程模型
- 流批一体
3、Apache Flink 开源生态
二、Flink整体架构
1、Flink分层架构
- SDK层:目前有三类 SQL/Table、DataStream、PYFlink。
- 执行引擎层:不管哪一类SDK,执行引擎层都提供了统一的DAG,用来描述数据处理的pipeline。不管是流/批,都会转化为DAG图。调度层再把DAG转化成分布式模式下的Task,Task之间通过shuffle传输数据。
- 状态存储层:负责存储算子的状态信息。
- 资源调度层:目前Flink可以支持部署在多种环境下。
2、Flink总体架构
(1)一个Flink集群,主要包括以下俩个核心组件:
- JobManager:负责整个任务的协调工作,包括调度Task、触发协调Task做checkpoint协调容错恢复等。
- TaskManager:负责执行一个DateFlow Graph的各个Task以及Date Stream的buffer和数据交换。
(2)JM组件职责
- Dispatcher:接收作业,拉起JM来执行作业,并在JM挂掉之后恢复作业。
- Jobmaster:管理一个job的整个生命周期,会向ResourceManager申请slot,并将task调度到对应JM上。
- ResourceManager:负责Slot资源党的管理和调度,Task Manager拉起之后会向RM注册JM。
3、Flink作业示例
为了更高效地分布式执行,Flink会尽可能将不同的OPerator(source)链接Chain在一起形成一个Task。这样每个Task可以在一个线程中执行,内部叫做OPeratorChain。这样可以减少切换和缓冲区交换,提高吞吐率。如下Source和Map
4、Flink如何做到流批一体
Q:为什么可以做到流批一体?
A:批式计算是流式计算的特例。Everything is Streams,有界数据集(批)也是一种特殊的数据集。因此,理论上我们是可以用一套引擎架构来解决上述两种场景,只不过需要对不同场景支持相应的扩展性,并允许做不同的优化策略。
(1)Apache Flink主要从以下几个模块来做流批一体的:
- SQL层
- DataStream API层统一,流批均支持DataStream API来开发。
- Scheduler层架构统一,支持流批场景。
- Failover Recovery层 容错
- shuffle service层架构统一,支持流批场景,选不同的Shuffle Service。
(2)1.12之前的Flink支持以下两种调度模式
- EAGER模式,特点:申请一个作业所需要的全部资源,后同时调度这个作业的全部Task,采取Pipeline方式进行通信。例如Stream作业场景。
- LAZY模式,特点:先调度上游,待上游产生数据或结束后在调度下游,类似Spark的Stage执行模式。例如Batch作业场景。
(3)最新Flink:由Pipeline数据交换方式连接的Task构成一个Pipeline region。本质上不管是流还是批都是按Pipeline region粒度来申请资源和调度任务的。
(4)Flink社区已经支持:
- Nerry Shuffle Service:既支持Pipeline又支持Blocking,Flink模式的Shuffle Service策略。
- Remote Shuffle Service:既支持Pipeline又支持Blocking,不过对于PIpeline模式,走Remote反而性能下降,主要是有用的batch的blocking场景,字节内部是基于CSS来实现Rss的。
三、Flink架构优化
1、/批/OLAP业务场景概述
例子:抖音红包雨,运维同学根据第一场雨情况,布局下一场雨。
Q:三种业务场景为什么可以用一套引擎来解决?
A:批式计算是流式计算的特例。Everything is Streams,有界数据集(批)也是一种特殊的数据集。因此,理论上我们是可以用一套引擎架构来解决上述两种场景,只不过需要对不同场景支持相应的扩展性,并允许做不同的优化策略。(2)而OLAP计算是一种特殊的批式计算,他对并发和实时性要求更高,只不过需要不同场景支持相应的扩展性,并允许做不同的优化策略。
OLAP场景需求:短查询作业场景、高并发支持、极致处理性能
2、Flink的OLAP优化之路
3、Flink OLAP架构现状
- Client:提交SQL QUery
- GateWay:接受Client提交的SQL QUery,对SQL进行语法解析和查询优化,生成Flink作业执行计划,提交给Session集群。
- Session Cluster:执行作业调度及计算,并返回结果。
四、Flink应用案例
(1)电商流批一体实践
(2)字节内AP引擎由HTAP提供
把AT、TP引擎全统一到HTAP中,提供事务处理。