这是我参与「第四届青训营」笔记创作活动的的第2天
一、Flink概述
1.1 Apache Flink的诞生背景
- 什么是大数据 指无法在一定时间内用常规软件工具对其进行获取、储存、管理和处理的数据集合。
- 大数据计算架构发展历史
- 为什么需要流式计算 大数据的实时性带来价值更大,比如:监控场景、金融风控、实时推荐,大数据实时性的需求带来了大数据计算架构模式的变化,从批式计算到流式计算。
1.2为什么Apache Flink会脱颖而出
- 流式计算框架对比
- Why flink
二、Flink整体架构
2.1 Flink分层架构
- SDK层:Flink的SDK目前主要有三类,SQL/Table、DataStream、Python
- 执行引擎层(Runtime 层):执行引擎层提供了统一的DAG,用来描述数据处理的Pipeline,不管是流还是批,都会转化为DAG图,调度层再把DAG转化成分布式环境下的Task, Task 之间通过Shuffle传输数据;
- 状态存储层:负责存储算子的状态信息;
- 资源调度层:目前Flink可以支持部署在多种环境。
2.2 Flink总体架构
一个Flink集群,主要包含以下两个核心组件:
- JobManager (JM) :负责整个任务的协调工作,包括:调度task、 触发协调Task做Checkpoint、协调容错恢复等;
- Dispatcher:接收作业,拉起JobManager来执行作业,并在JobMaster挂掉之后恢复作业;
- JobMaster:管理个 job的整个生命周期,会向ResourceManager申请slot,并将task调度到对应TM上;
- ResourceManager:负责slot资源的管理和调度,Task manager拉起之后会向RM注册;
- TaskManager (TM) :负责执行一个DataFlowGraph的各个task以及data streams的buffer和数据交换。
2.3 Flink作业示例
流式的WordCount示例,从kafka中读取一个实时数据流, 每10s统计一次单词出现次数, DataStream 实现代码如下:
DataStream<String> lines = env.addSource
new FlinkKa fkaConsumer<>...)) ;
DataStream<Event> events = lines .map((line) -> parse (1ine));
DataStream<Statistics> stats = events
.keyBy (event->event.id)
.timeWindow (Time.seconds(10) )
.apply(new MyWi ndowAggregationFunction()) ;
stats.addsink (new BucketingSink(path)) ;
2.4 Flink如何做到流批一体
- 为什么需要流批一体 举个例子:
1.在抖音中,实时统计一个短视频的播放量、点赞数,也包括抖音直播间的实时观看人数等;
2.在抖音中,按天统计创造者的一些数据信息,比如昨天的播放量有多少、评论量多少、广告收入多少;
上述架构有一些痛点:
1.人力成本比较高:批、流两套系统,相同逻辑需要开发两遍;
2.数据链路冗余:本身计算内容是致的, 由于是两套链路,相同逻辑需要运行两遍,产生一 定的资源浪费;
3.数据口径不一致:两套系统、两套算子、两套UDF,通常会产生不同程度的误差,这些误差 会给业务方带来非常大的困扰。
- 流批一体的挑战
- Flink如何做到流批一体
-
批式计算是流式计算的特例,Everything is Streams,有界数据集(批式数据)也是种数据流、 一种特殊的数据流。因此,理论上我们是可以用一套引擎架构来解决上述两种场景,只不过需要对不同场景支持相应的扩展性、并允许做不同的优化策略。
-
站在Flink的角度,Everything is Streams, 无边界数据集是种数据流,一个无边界的数据流可以按时间切段成一个个有边界的数据集,所以有界数据集(批式数据)也是种数据流。因此,不管是有边界的数据集(批式数据)还是无边界数据集,Flink 都可以天然地支持,这是Flink支持流批一体的基础。并且Flink在流批一体上,从上面的API到底层的处理机制都是统一的,是真正意义上的流批一体。
三、Flink架构优化
3.1流、批、OLAP业务场景概述
在实际生产环境中,针对不同的应用场景,我们对数据处理的要求是不同的:
1.有些场景下,只需离线处理数据,对实时性要求不高,但要求系统吞吐率高,典型的应用是搜索引擎构建索引;
2.有些场景下,需对数据进行实时分析,要求每条数据处理延迟尽可能低,典型的应用是广告推荐、金融风控场景。
举个例子:
1.在抖音中,实时统计一个短视频的播放量、点赞数,也包括抖音直播间的实时观看,人数等;
2.在抖音中,按天统计创造者的些数据信息,比如昨天的播放量有多少、评论量多少、广告收入多少;
3.在抖音的一些推广活动中,运营同学需要对一些实时产出的结果数据做一些实时多维分析, 来帮助后 面活动的决策。
三种业务场景的特点对比如下表:
三种业务场景的解决方案的要求及带来的挑战是:
3.2 Flink如何支持OLAP场景
- Flink做OLAP的优势
- Flink OLAP架构现状
- Flink 在OLAP架构的问题与设想