流批OLAP 一体的 Flink 引擎介绍(一) | 青训营笔记

126 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第5天

Flink概述——为什么会有流式计算的需求,为什么Flink能够脱颖而出,Flink当前的开源生态

Apache Flink的诞生背景

什么是大数据

大数据(Big Data):指无法在一定时间内用常规的工具对其进行获取、存储、管理和处理的数据集合。

特点:价值化、海量化、快速化、多样化

大数据计算框架发展历史

史前阶段~2006

传统数仓、Oracle、单机、黑箱使用

Hadoop

分布式、Map-Reduce、离线计算

Spark

批处理、流处理、SQL高阶API、内存迭代计算

Flink

流计算、实时且更快、流批一体、Streaming/Batch SQl

为什么需要流式计算

大数据的实时性带来的价值更大,比如:

1.监控场景:如果能实时发现业务系统的健康状态,就能提前避免业务故障;

2.金融风控:如果实时检测出异常交易的行为,就能及时阻断风险的发生;

3.实时推荐:比如在抖音,如果可以根据用户的行为数据发掘用户的兴趣、偏好,就能向用户推荐更感兴趣的内容……

大数据实时性的需求,带来了大数据计算架构模式的变化

批式计算

离线计算、非实时

静态数据集

小时/天等周期性计算

流式计算

实时计算,快速、低延迟

无限流、动态、无边界

7*24h持续运行

为什么Apache Flink会脱颖而出

流式计算引擎发展历程

大数据如果从Google对外发布Map-Reduce论文算起,已经前后跨越将近二十年,业内常用的计算框架演化历史(红框是流式计算框架):

流批处理.png

流式计算引擎对比

流式计算框架对比:

对比新.png

Why Flink

Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded data streams.Flink has been designed to run in all common cluster environments,perform computations at in-memory speed and at any scale.

Apache Flink开源生态

开源生态.png

Flink整体架构——Flink当前的整体结构介绍,一个Flink作业如何调度和运行起来,Flink如何做到流批一体

Flink分层架构——Flink各个模块的用途

1.SDK层:FLink的SDK目前主要有三类,SQL/Table、DataStream、Python;

2.执行引擎层(Runtime层):执行引擎层提供了统一的DAG,用来描述数据处理的Pipeline,不管是流还是批,都会转化为DAG图,调度层再把DAG转化成分布式环境下的Task,Task之间通过Shuffle传输数据;

3.状态存储层:负责存储算子的状态信息;

4.资源调度层:目前Flink可以支持部署在多种环境。

Flink总体架构——Master/Slave架构、JobManager/TaskManager

Apache....png 一个Flink集群,主要包含以下两个核心组件:

1.JobManager(JM):负责整个任务的协调工作,包括:调度task、触发协调Task做Checkpoint、协调容错恢复等;

2.TaskManager(TM):负责执行一个DataFlow Graph的各个task以及data streams 的buffer和数据交换。

JobManager职责:

TM.png Dispatcher:接收作业,拉起JobManager来执行作业,并在JobMaster挂掉之后恢复作业;

JobMaster:管理一个job的整个生命周期,会向ResourceManager申请slot,并将task调度到对应TM上;

ResourceManager:负责slot资源的管理和调度,Task manager拉起之后会向RM注册;