这是我参与「第四届青训营 」笔记创作活动的的第3天
-
Flink概述
-
发展
Hadoop(分布式) --> Spark(批处理,流处理) --> Flink(流计算,实时、更快,流批一体)
-
批式计算
离线计算,静态数据集,小时/天等周期性计算
-
流式计算
实时计算,快速、低延迟,无限流、动态、无边界,持续运行,流批一体
-
流式框架对比
-
-
Flink整体架构
-
Flink分层架构
- SDK层:SQL/Table,DataStream,pyFlink
- 执行引擎层(Runtime层):执行引擎层提供了统一的DAG,用来描述数据处理的Pipeline,不管是流还是批,都会转化为DAG图,调度层再把DAG转化成分布式环境下的Task,Task之间通过Shuffle传输数据
- 状态存储层:负责存储算子的状态信息
- 资源调度层:目前Flink可以支持部署在多种环境
-
Flink整体架构
- 核心组件:
- JobManager(JM):负责整个任务的协调工作,包括:调度task、触发协调 Task做Checkpoint、协调容错回复等;
- Dispatcher:接收作业,拉起JobManager来执行作业,并在JobMaster挂掉之恢复作业
- JobMaster:管理一个job的整个生命周期,回想ResourceManager申请slot,并将task调度到对应TM上
- ResourceManager:负责slot资源的管理和调度,Task manager拉起之后会向RM注册
- TaskManager(TM):负责执行一个DataFlow Graph的各个task以及data streams的buffer和数据交换
- JobManager(JM):负责整个任务的协调工作,包括:调度task、触发协调 Task做Checkpoint、协调容错回复等;
- 核心组件:
-
Flink作业示例
流式的WordCount示例,从kafka中读取一个实时数据流,每10s统计一次单词出现次数,DataStream实现代码如下
-
Flink如何做到流批一体
-
why:是对与实时数据处理需要的条件下产生的,为了减少资源浪费,对于业务的相关应用
-
维度 流式计算 批式计算 数据流 无限数据集 有限数据集 时延 低延迟、业务会感知运行中的情况 实时性要求不高,只关注最终结果产出时间 -
Flink对一下模块进行优化来实现流批一体
- SQL层;
- DataStreatm API层统一,批和流都可以使用DataStream API来开发;
- Scheduler层架构统一,支持流批场景;
- Failover Recovery层架构统一,支持流批场景;
- Shuffle Service层架构统一,流批场景选择不同的Shuffle Service;
- Shuffle:在分布式计算中,用来连接上下游数据交互的过程叫做Shuffle
- Shuffle的实现
- 基于文件的Pull Based Shuffle:具有较高的容错性
- 基于Pipeline的Push Based Shuffle:低延迟和高性能
- FLIP-31: Pluggable Shuffle Service - Apache Flink - Apache Software Foundation
-
-
Flink调度模式
模式 特点 场景 EAGER 申请一个作业所需要的全部资源,然后同时调度这个作业的全部Task,所有的Task之间采取pipeline的方式进行通信 Stream作业场景 LAZY 先调度上游,等待上游产生数据或结束后再调度下游,类似Spark的Stage执行模式 Batch作业场景 由Pipeline的数据交换方式连接的Task构成为一个Pipeline Region
-
-
Flink架构优化
-
三种业务场景的特点对比
流式计算 批式计算 交互式分析 实时计算 离线计算 OLAP 延迟在秒级以内 处理时间为分钟到小时级别,甚至天级别 处理时间秒级 0~1s 10s~1h+ 1~10s 广告推荐、金融风控 搜索引擎构建索引、批式数据分析 数据分析 BI报表 OLAP计算是一种特殊的批式计算,他对并发性和实时性要求更高
-
Flink OLAP 架构现状
- Client:提交SQL Query
- Gateway:接受Client提交的SQL Query,对SQL进行语法解析和查询优化,生成Flink作业执行计划,提交给Session集群
- Session Cluster:执行作业调度及计算,并返回结果
-
-
实践
-
对于前面提到的Flink案例实习,引用学院预习手册里的连接,对相关操作进行复现,理解Flink运行
-
[一文读懂Apache Flink技术 - 掘金 (juejin.cn)