这是我参与「第四届青训营 」笔记创作活动的的第3天
0.流/批/OLAP
-
批式计算:离线计算,非实时,静态数据集,小时、天为计算单位
-
流式计算:实时计算,无限流,动态无边界,7*24运行
-
OLAP:交互式分析,高并发查询
1.Flink概述
1.1Apache Flink 诞生背景
-
大数据:无法在一定时间内无法用常规软件工具对其进行获取,存储,管理和处理的集合,4V特点
-
发展历史
-
史前:传统数仓,Oracle
-
Hadoop:分布式,map-reduce,离线计算
-
Spark:批处理,流处理,内存迭代计算,SQL
-
Flink:流计算,实时,流批一体,SQL
-
-
应用场景:监控场景,金融风控,实施推荐
1.2Flink的优势
- 流式引擎
- Exactly-Once:精确一次的计算语义
- checkpoint:状态容错
- Dataflow编程模型:window等高阶需求支持良好
- 流批一体
1.3 Apache Flink 开源生态
- 支持消息队列,redis,HDFS,HIVE
- 部署在yarn,K8S
- SQL,DataStream,pyFlink
2.Flink整体架构
2.1 Flink 分层架构
-
SDK层:SQL/Table,DataStream,python;
-
执行引擎层(Runtime层):执行引擎层提供了统一的DAG,用来描述数据处理的Pipeline,不管是流还是批,都会转化为DAG图,调度层再把DAG转化成分布式环境下的Task,Task之间在进行通信
-
状态存储层:负责存储算子的状态信息
-
资源调度层:目前Flink可以支持部署在多种环境
2.2 Flink 总体架构
-
一个Flink集群,主要包含以下两个核心组件
-
JobManager(JM):负责整个任务的协调工作
包括:调度task,触发协调Task做Checkpoint,协调容错恢复等
-
TaskManager(TM):负责执行一个DataFlow Graph的各个task以及data streams的buffer和 数据交换
-
-
JM的职责:
- dispatcher:接收作业,拉起JM来执行作业,并在JM挂掉之后恢复作业;
- JobMaster:管理一个job的整个生命周期,会向ResourceManager申请slot,并将task调度到对应task上
- ResourceManager:负责solt资源的管理和调度,TM拉起后会向RM注册
2.3 Flink 如何做的流批一体
-
为什么需要流批一体
根据每天的点赞播放计算收益
传统处理:一个实时,一个离线
缺点:人力成本高,数据冗余,数据口径不一致
-
批式计算式流式计算的特例:Everything is stream
-
通过模块实现流批一体
- SQL层
- DataStream API 层统一,批和流都可以使用DataStream API开发
- Scheduler 层架构统一,支持流批场景
- Failover Recovery 层架构统一,支持流批场景
- Shuffle Service层架构统一,流批场景选择不同Shuffle Service
-
shuffle:在分布式计算中,用来连接上下游数据交互的过程叫做shuffle