ShanTianQi

流/批/OLAP一体的Flink引擎 | 青训营笔记

流/批/OLAP一体的Flink引擎


1.1Flink概述


1.1.1Apache Flink的诞生背景


一、什么是大数据

大数据(Big Data):指无法在一定时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合。

二、发展历史

史前阶段~2006HadoopSparkFlink
传统数仓分布式批处理流计算
OracleMap-Reduce流处理实时、更快
单机离线计算SQL高阶API流批一体
黑箱使用内存迭代计算Streaming/Batch SQL

三、为什么需要流式计算

大数据实时性带来价值更大

批式计算流式计算
离线计算,非实时实时计算,快速、低延迟
静态数据集无线流、动态、无边界
小时/天等周期性计算7 * 24h持续运行
流批一体

1.1.2为什么Apache Flink会脱颖而出


QQ截图20220731120312.png


1.1.3Apache Flink开源生态


来自


1.2Flink整体架构


1.2.1Flink分层架构


一、SDK层

Flink的SDK目前主要有三类:SQL/Table、DataStream、Python

二、执行引擎层(Runtime层)

执行引擎层提供了统一的DAG,用来描述数据处理的Pipeline,不管是流还是批,都会转化为DAG图,调度层再把DAG转化成分布式环境下的Task,Task之间通过Shuffle传输数据。

三、状态存储层

负责存储算子的状态信息

四、资源调度层

目前Flink可以支持部署在多种环境


1.2.2Flink整体架构


一个Flink集群,主要包括以下两个核心组件:

一、JobManager(JM)

负责整个任务的协调工作,包括:调度task、触发协调Task做Checkpoint、协调容错恢复等

QQ截图20220731130248.png

二、TaskManager(TM)

负责执行一个DataFlow Graph的各个task以及data streams的buffer和数据交换


1.2.3Flink如何做到流批一体


一、为什么需要流批一体

抖音:实时统计短视频播放量,点赞数。按天统计创造者的一些数据信息,如昨天的播放量多少。

QQ截图20220731132741.png

这种架构有一些痛点:

二、流批一体的挑战

流式计算批式计算
实时计算离线计算
延迟在秒级以内处理时间为分钟到小时级别,甚至天级别
0 ~ 1s10s ~ 1h+
广告推荐、金融风控搜索引擎构建索引、批式数据分析

批式计算相比于流式计算核心区别:

维度流式计算批式计算
数据流无限数据集有限数据集
时延低延迟、业务会感知运行中的情况实时性要求不高,只关注最终结果产出时间

三、Flink如何做到流批一体

批式计算是流式计算的特例,Everything is Streams,有界数据集(批式数据)也是一种数据流、一种特殊的数据流

QQ截图20220731133357.png

站在 Flink 的角度,Everything is Streams,无边界数据集是一种数据流,一个无边界的数据流可以按时间切段成一有边界的数据集,所以有界数据集(批式数据)也是一种数据流。因此,不管是有边界的数据集(批式数据)还是无边界数据集,Flink 都可以天然地支持,这是 Flink 支持流批一体的基础。并且 Flink 在流批一体上,从上面的 API 到底层的处理机制都是统一的,是真正意义上的流批一体

Apache Flink 主要从以下几个模块来做流批一体:

四、流批一体的Scheduler层

Scheduler 主要负责将作业的 DAG 转化为在分布式环境中可以执行的 Task

在1.12之前的Flink版本中,Flink支持以下两种调度模式:

模式特点场景
EAGER申请一 个作业所需要的全部资源,然后同时调度。这个作业的全部Task,所有的Task之间采取。Pipeline的方式进行通信Stream作业场景
LAZY先调度上游,等待上游产生数据或结束后再调度。下游,类似Spark的Stage执行模式。Batch作业场景

EAGER模式(Streaming 场景)

LAZY(Batch 场景)

Pipeline Region

由Pipeline的数据交换方式连接的Task构成一个Pipeline Region

本质上,不管是流作业还是批作业,都是按照Pipeline Region粒度来申请资源和调度任务

ALL_EDGES_BLOCKIN

ALL_EDGES_PIPELINED

五、流批一体的Shuffle Service层

Shuffle:在分布式计算中,用来连接上下游数据交互的过程叫做 Shuffle。

实际上,分布式计算中所有涉及到上下游衔接的过程,都可以理解为 Shuffle

Shuffle 分类:

流和批 Shuffle 之间的差异:

Pluggable Shuffle Service:Flink 的目标是提供一套统一的 Shuffle 架构,既可以满足不同 Shuffle 在策略上的定制,同时还能避免在共性需求上进行重复开发

Flink 流批一体总结


1.3Flink架构优化


1.3.1流/批/OLAP业务场景概述


三种业务场景的特点:

流式计算批式计算交互式分析
实时计算离线计算OLAP
延迟在秒级以内处理时间为分钟到小时级别,甚至天级别处理时间秒级
0 ~ 1s10s ~ 1h+1 ~ 10s
广告推荐、金融风控搜索引擎构建索引、批式数据分析数据分析BI报表

三种业务场景的解决方案的要求及带来的挑战:

模块流式计算批式计算交互式分析(OLAP)
SQLYesYesYes
实时性高、处理延迟毫秒级别低高、查询延迟在秒级,但要求高并发查询
容错能力高中,大作业失败重跑代价高No,失败重试即可
状态YesNoNo
准确性Exactly Once,要求高,重跑需要恢复之前的状态Exactly Once,失败重跑即可Exactly Once,失败重跑即可
扩展性YesYesYes

1.3.2为什么三种场景可以用一套引擎来解决


场景上对比发现:

Apache Flink从流式计算出发,需要想支持Batch和OLAP场景,就需要解决下面的问题:

Batch场景需求OLAP场景需求
流批一体支持短查询作业场景
Unify DataStream API高并发支持
Scheduler极致处理性能
Shuffle Service
Failover Recovery

1.3.3Flink如何支持OLAP场景


一、Flink 做 OLAP 的优势

二、Flink OLAP 场景的挑战

三、Flink OLAP 架构现状

四、Flink 在 OLAP 架构上的问题与设想


1.4Flink使用案例


1.4.1电商流批一体实践


抖音电商业务原有的离线和实时数仓架构:

QQ截图20220731132741.png

Flink社区现状

QQ截图20220731183827.png

目前电商业务数据分为离线数仓和实时数仓建设,离线和实时数据源,计算引擎和业务代码没有统一,在开
发相同需求的时候经常需要离线和实时对齐口径,同时,由于需要维护两套计算路径,对运维也带来压力。

从数据源,业务逻辑,计算引擎完成统一,提高开发和运维效率。



HTAP场景

QQ截图20220731184024.png

原来的链路

QQ截图20220731184101.png

走HTAP之后的链路,Flink之间提供数据查询与分析能力

QQ截图20220731184108.png

#大数据#流/批/OLAP一体的Flink引擎