这是我参与「第四届青训营 」笔记创作活动的第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论文算起,已经前后跨越将近二十年,业内常用的计算框架演化历史(红框是流式计算框架):
流式计算引擎对比
流式计算框架对比:
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开源生态
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
一个Flink集群,主要包含以下两个核心组件:
1.JobManager(JM):负责整个任务的协调工作,包括:调度task、触发协调Task做Checkpoint、协调容错恢复等;
2.TaskManager(TM):负责执行一个DataFlow Graph的各个task以及data streams 的buffer和数据交换。
JobManager职责:
Dispatcher:接收作业,拉起JobManager来执行作业,并在JobMaster挂掉之后恢复作业;
JobMaster:管理一个job的整个生命周期,会向ResourceManager申请slot,并将task调度到对应TM上;
ResourceManager:负责slot资源的管理和调度,Task manager拉起之后会向RM注册;