FIink引擎|青训营笔记

110 阅读3分钟

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

Flink概述

Flink诞生背景

1.大数据

Big Data:指在一定时间内无法用常规软件工具对其进行获取、存储、管理和处理的数据集合
具有价值化、海量化、快速化、多样化特点

2.大数据计算架构发展历史

Snipaste_2022-07-27_20-23-56.jpg

3.流式计算的产生

大数据时代,实时性具有很大的价值

  1. 监控场景:如果能实时发现业务系统的健康状态,就能提前避免业务故障
  2. 金融风控:实时监测出异常交易的行为
  3. 实时推荐:抖音推荐
  4. ...

实时性推动了大数据计算架构模式的变化 Snipaste_2022-07-27_20-28-36.jpg

Flink的脱颖而出

Snipaste_2022-07-27_20-32-01.jpg

Snipaste_2022-07-27_20-32-17.jpg

Flink开源生态

Snipaste_2022-07-27_20-33-24.jpg

Flink整体架构

Flink分层架构

Snipaste_2022-07-27_20-35-49.jpg

  1. SDK层:Flink目前的SDK主要有三类:SQL/Table、DataStream、Python
  2. 执行引擎层:提供了统一的DAG,用来描述数据处理的Pipeline,不管流还是批都会转化为DAG图,调度层再把DAG转化成分布式环境下的Task,task之间通过Shuffle传输数据
  3. 状态存储层:负责存储算子的状态信息
  4. 资源调度层:Flink可以支持部署再多种环境

Flink总体架构

一个Flink集群主要包含两个核心组件:

  1. JobManager(JM):负责整个任务协调工作,包括:调度Task,触发协调Task做CheckPoint,协调容错恢复等
  2. TaskManager(TM):负责执行一个DataFlow Graph的各个Task以及data streams 的buffer和数据交换

JobManager

Snipaste_2022-07-27_20-44-10.jpg

  • Dispatcher:接收作业,拉起JobManager执行作业,并在JobManager挂掉之后恢复作业
  • JobMaster:管理一个job的整个生命周期,会向ResourceManager申请slot,并将task调度到对应的TM上
  • ResourceManager:负责slot资源的管理和调度,TaskManager拉起之后会向RM注册

Flink实现流批一体

1. 为什么需要流批一体

应用角度:

  1. 实时统计一个短视频的播放量、点赞数、抖音直播间的实时观看人数----流
  2. 按天统计创造者的一些数据信息,例如播放量、评论量、广告收入------批

实现架构:

Snipaste_2022-07-27_22-21-03.jpg 上述架构的痛点:

  1. 人力成本高:批、流两套系统,相同逻辑需要开发两遍
  2. 数据链路冗余:本身计算内容一直,由于是两套链路,相同逻辑需要运行两遍,产生一定的资源浪费
  3. 数据口径不一致:两套系统、两套UDF,通常会产生不同程度的误差,这些误差会给业务方带来非常大的困扰

2.流批议题的挑战

流批业务场景

Snipaste_2022-07-27_22-25-27.jpg
批式计算相比于流式计算核心区别

Snipaste_2022-07-27_22-26-02.jpg

3.Flink为什么可以做到流批一体

批式计算可以看作流式计算的特例,Everything is Streams,有界数据集也是一种特殊的数据流。站在Flink 的角度,Everything is Streams,无边界数据集是一种数据流,一个无边界的数据流可以按时间切段成一个个有边界的数据集,所以有界数据集(批式数据)也是一种数据流。因此,不管是有边界的数据集(批式数据)还是无边界数据集,Flink都可以天然地支持,这是Flink支持流批一体的基础。并且Flink在流批一体上,从上面的API到底层的处理机制都是统一的,是真正意义上的流批一体。

Apache Flink主要从以下几个模块来做流批一体:

  1. SQL层;
  2. DataStream API层统一,批和流都可以使用DataStream API来开发;
  3. Scheduler层架构统一,支持流批场景;
  4. Failover Recovery层架构统一,支持流批场景;
  5. Shuffle Service层架构统一,流批场景选择不同的 Shuffle Service;