这是我参与「第四届青训营 」笔记创作活动的的第2天
本节课程主要介绍Flink,内容主要包括Flink概述、Flink整体架构及其架构优化。在此基础上,主讲人还介绍了字节跳动内部使用Flink的两个真实案例。
一、Flink概述
1.Apache Flink诞生背景
大数据具有以下5V特征:
1.Volume,大体量;
2.Variety,多样性;
3.Velocity,时效性;
4.Veracity,准确性;
5.Value,大价值。
大数据发展历史:
"史前阶段"->Hadoop->Spark->Flink(实时)
批式计算和流式计算的对比:
2.Apache Flink优势
Apache Flink以其一次性处理,低延迟,高吞吐,支持SQL从流式计算框架中脱颖而出。
(1)Apache Flink开源生态
Flink本身没有数据存储功能,但是和业内比较流行的存储进行了集成。
二、Flink整体架构
1.分层架构
①SDK层:SQL/Table、DataStream、Python
②执行引擎层(Runtime层):转化为DAG图,调度层把DAG转化为分布式环境下的Task,Task之间通过Shuffle传输数据
③状态存储层:负责存储算子的状态信息
④资源调度层:支持部署在多种环境
2.整体架构
一个Flink集群,主要包含JobManager(JM)和TaskManager(TM)。JM负责协调工作,TM负责执行DAG的task和data streams的buffer和数据交换。
JM包括:
Dispatcher:接收作业,拉JobManager执行作业,并恢复作业
JobMaster:管理一个job的整个生命周期
ResourceManager:负责slot资源的管理和调度
ResourceManager相当于经理,得到资源分给JobMaster,JobMaster相当于组长进行管理,Dispatcher相当于小组长,安排TM工作。
TM包含多个slot,一个slot只能运行同一个task的subTask。
3.Flink如何做到流批一体
如果流批分开,相同逻辑要开发两遍,运行两遍,通常会产生不同程度的误差。
批式计算是流式的特例,所以可以进行流批一体。
Flink从SQL层、DataStream API、Scheduler层、Failover Recovery层、Shuffle Service层实现流批一体。
之前版本Flink支持EAGER和LAZY两种调度模式,分别用来实现流批场景。
现在的Flink流批作业都按照Pipeline Region调度,对流批在调度层实现统一,分为ALL_EDGES_BLOCKING和ALL_EDGES_PIPELING。
三、Flink架构优化
OLAP最大的特点是高并发。
OLAP是一种特殊的批式计算,对并发和实时性要求更高,所以三者可以用一套引擎解决。
Flink OLAP需要Gateway接收Client提交的SQL Query,对其进行语法解析和查询优化,生成作业执行计划,由Session集群执行作业调度和计算。
四、总结
1.我们生活中使用的数据有的需要批式处理,有的需要流式处理,还有特殊的需要使用OLAP。之前的架构是搭建两套处理方案,将流批分开,这样增加了开发成本,造成浪费。Flink真正做到了流批一体,使两者可以共用一套系统,满足不同的需求。
2.正是因为批式计算可以看作特殊的流式计算,OLAP可以看作特殊的批式计算,流批一体才成为可能。
3.Flink虽然现在的功能很强大,但是还有进步的空间,有需要继续改进的地方。