这是我参与「第四届青训营 」笔记创作活动的的第3天
本节课主要讲了Flink的相关介绍,包括概述、整体构架、构架优化与案例讲解。
1. Flink 概述 (Apache Flink)
-
诞生背景
大数据:价值化,海量化,多样化,快速化
大数据计算架构发展历史:2006 -> Hadoop -> Spark -> Flink(实时,更快)
流式计算:价值更大(e.g. 实时监控,推荐,风控)
批式计算->流式计算
-
为什么脱颖而出?
流式计算对比:Storm vs Spark Streaming vs Flink
Flink:流批一体;Exactly-once;状态容错;Dataflow编程模型
开源生态
2. Flink 整体构架
- 分层架构
(1)SDK层:SQL/Table, DataStream, Python
(2)执行引擎层:转化为DAG,Task
(3)状态储存层
(4)资源调度层
-
总体架构
JobManager:整个任务的协调工作
TaskManager:负责task执行和buffer的数据交换
JobManager包括:
graph TD
Dispatcher --> JobMaster --> ResourceManager
Dispatcher : 接受作业
JobMaster:向RS申请slot
ResourceManager:负责资源调度
-
作业示例
-
如何做到流批一体
为什么需要:实时统计相关数据
| 流式计算 | 批式计算 |
|---|---|
| 实时计算 | 离线计算 |
| 延迟在秒级以内 | 处理时间为分钟到小时,甚至天 |
| 0~1s | 10s~1h+ |
| 广告推荐,金融风控 | 搜索引擎构建索引,批式数据分析 |
| 无限数据集 | 有限数据集 |
| 低延迟,会感知运营中的情况 | 对实时性要求不高 |
怎么做到:everything is stream(基础)
(1)SQL层
(2)DataStream API层统一
(3)Scheduler:DAG转化为Task
| EAGER | LAZY |
|---|---|
| 申请全部资源,调度所有Task,Pipeline通信 | 先上游后下游 |
| Stream作业场景 | Batch作业场景 |
| task一起调度 | 最小一个task |
(4)Failover Recovery
(5)Shuffle Service
shuffle:上下游数据交换
| 基于文件 | 基于pipeline |
|---|---|
| 较高容错与稳定性 | 低延迟高性能 |
3. Flink 架构优化
-
业务场景概述
不同场景,数据处理要求不同
OLPA : 要求高并发查询,查询延迟在秒级
-
为什么三种场景可以用一套引擎来解决
- 批式计算是流式计算的特例
-
Flink如何支持OLAP场景
优势:引擎统一;既有优势;生态支持
挑战:秒级和毫秒级->作业频繁启停->Latency+QPS的要求
构架现状:Client->Gateway->Session Cluster
4. 精选案例
-
电商流批一体实践
-
字节Flink OLAP实践