这是我参与「第四届青训营 」笔记创作活动的第2天
流/批/OLAP一体的Flink引擎
目录:
1、Flink概述
2、Flink整体架构
一、Flink概述
1.1 Apache Flink诞生背景
1.1.1 什么是大数据?
指的是无法再一定时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合
价值化 海量化 快速化 多样化
1.1.2 大数据计算架构发展历史
1.1.3 为什么需要流式计算?
大数据实时性的需求,带来了大数据计算架构模式的变化
1.2 Flink为什么脱颖而出
1.2.1流式计算引擎发展历程
大数据如果从Google对外发布MapReduce算起来,已经跨越将近20年
1.2.2 流式计算引擎对比
流式计算框架对比:
1.3 Apache Flink开源生态
二、Flink整体架构
2.1 Flink分层架构
- SDK层:
- 执行引擎层(Runtime)执行引擎提供了统一的DAG,用来描述数据处理的pipeline,不管是流还是批,都会转化成DAG,调度层再把DAG转化成分布式环境下的Task,Task之间通过Shuffle传输数据。
- 状态存储层:负责存储算子的状态信息
- 资源调度曾:目前Flink可以支持部署在多种环境。
2.2 Flink总体架构
一个Flink集群,主要包含以下两个核心组件:
- JobManager:负责整个任务的协调工作,包括调度task 出发协调task坐checkpoint,协调容错恢复
- TaskManager;负责执行一个DataFlowGraph的各个task以及data streams的buffer和数据交换。
- Dispatcher 接受作业 拉起JM来执行作业,并在JobMaster挂掉之后恢复作业
- JobMaster 管理一个job的整个生命周期,并向ResourceManager申请slot,并将task调度到对应TM上
- ResourceManager 负责slot资源的管理和调度,Task manager拉起之后会向RM注册。
2.3 部分Flink实例
2.4 Flink如何做到流批一体
2.4.1 为什么需要流批一体
2.4.2 流批一体的挑战
批式计算相比于流式计算核心的区别:
2.4.3 Flink如何做到流批一体
1.批式计算是流式计算的特里,Everything is Streams, 有界数据集也是一种数据流,一种特殊的数据流
因此,理论上可以用一套引擎来解决两种场景,这是需要对不同场景的扩展性做不同的优化策略。
2.4.4 Scheduler层
Scheduler主要负责将作业的DAG转化为在分布式环境种可以执行的Task
两种调度模式
EAGER Stream作业场景
LAZY Batch作业场景
2.4.5 流批一体的Shuffle Service层
针对不同的分布式计算框架 有两种不同的实现
1、基于文件的Pull Based Shuffle,比如Spark或MR
2、基于Pipeline的Push Based Shuffle 比如 Flink Storm Presto
对于Shuffle Service Flink开源社区已经支持:
1、Netty Shuffle Service
2、Remote Shuffle Service