这是我参与「第四届青训营 」笔记创作活动的的第2天
- Flink概述
- 背景
- 大数据
- 无法在一定时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合
- 海量化(Volumes)
- 多样化(Variety)
- 快速化(Velocity)
- 价值化(Value)
- 业内对大数据的实时性提出了更高的要求
- 大数据
- Flink优点
- 状态容错(checkpoint)
- Exactly-Once精确一次的计算语义
- Dataflow编程模型
- 流批一体
- 背景
- Flink整体架构
- 分层架构
- SDK层
- SQL/Table
- DataStream
- Python
- 执行引擎层(Runtime层)
- 提供统一的DAG,用来描述数据处理的Pipeline,不管是流还是批,都会转化为DAG图,调度层再把DAG转化为分布式环境下的Task,Task之间通过Shuffle传输数据
- 状态存储层
- 负责存储算子的状态信息
- 资源调度层
- 可支持部署在多种环境中
- SDK层
- 总体架构
- 包括两个核心组件
- JobManager
- 负责整个任务的协调工作,包括:调度task、触发协调task做checkpoint、协调容错恢复等
- Dispatcher
- 接收作业,拉起JobMaster来执行作业,并在JobMaster挂掉之后恢复作业
- JobMaster
- 管理一个job的整个生命周期,会向ResourceManager申请slot,并将task调度到对应TaskManager上
- ResourceManager
- 负责slot资源的管理和调度,Task Manager拉起后会向ResourceManager注册
- TaskManager
- 负责执行一个DataFlow Graph的各个task以及data streams的buffer和数据交换
- JobManager
- 包括两个核心组件
- 作业示例
- 具体见(Flink 架构 | Apache Flink)
- OperatorChain
- 流批一体
- Everything is Streams
- 无边界数据集是一种数据流,一个无边界数据流可以按时间切段成一个个有边界的数据集,所以有界数据集也是一种数据流
- 从以下几个模块来做流批一体
- SQL层
- Datastream API层统一,批和流都可以使用Datastream API开发
- Scheduler层架构统一,支持流批场景
- 主要负责将作业的DAG转化为在分布式环境中可以执行的Task
- 调度机制
- 由Pipeline的数据交换方式连接的Task构成为一个Pipeline Region
- 为了兼顾流批进行的抽象
- ALL_EDGES_BLOCKING
- ALL_EDGES_PIPELINED
- Failover Recovery层架构统一,支持流批场景
- Shuffle Service层架构统一,流批场景选择不同的Shuffle Service
- Shuffle
- 在分布式计算中,用来连接上下游数据交互的过程叫做Shuffle
- 实际上,分布式计算中所有涉及到上下游衔接的过程,都可以理解为Shuffle
- 实现
- 基于文件的Pull Based Shuffle
- 特点是具有较高的容错性,适合较大规模的批处理作业,由于是基于文件的,容错性和稳定性会更好一些,例如Spark和MR
- 基于Pipeline的Push Based Shuffle
- 特点是低延迟和高性能,但是因为Shuffle数据没有存储下来,如果是batch任务的话就需要进行重跑恢复,例如Flink、Storm、Presto
- Flink为了统一在Streaming和Batch模式下的Shuffle架构,实现了一个Pluggable的Shuffle Service框架,抽象出一些公共模块
- 基于文件的Pull Based Shuffle
- 流和批Shuffle之间的差异
- Shuffle数据的生命周期
- 流作业的Shuffle数据与Task是绑定的,而批作业的Shuffle数据与Task是解耦的
- Shuffle数据存储介质
- 流作业的生命周期比较短,而流作业为了实时性,Shuffle通常存储在内存中,批作业因为数据量比较大以及容错的需求,一般会存储在磁盘中
- Shuffle的部署方式
- 流作业Shuffle服务和计算节点部署在一起,可以减少网络开销,从而减少Latency,而批作业则不同
- Shuffle数据的生命周期
- Shuffle
- Everything is Streams
- 分层架构
- Flink架构优化
- 流/批/OLAP业务场景
- OLAP
- 交互式分析
- 数据分析BI报表
- 高查询、延迟在秒级,要求高并发查询
- 特殊的批式计算
- 交互式分析
- OLAP
- OLAP架构现状
- Client
- 提交SQL Query
- Gateway
- 接收SQL Query,对SQL进行语法解析和查询优化,生成Flink作业执行计划,提交给Session集群
- Session Cluster
- 执行作业调度及计算,并返回结果
- Client
- 流/批/OLAP业务场景
- 案例讲解
- HTAP