流/批/OLAP 一体的 Flink 引擎 | 青训营笔记

117 阅读2分钟

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

一、本次堂课笔记的内容

  • Flink 概述
  • Flink 整体架构

二、知识点小结

1.Flink 概述

       Flink产生原因:传统的批式计算实时性较差,业内对于数据的实时性有了更高的要求,比如业务监控、金融风险监测、抖音的实时推荐等,而Flink的流式计算的实时性则可以满足这一要求。

1.1计算架构发展史

graph LR
A(传统) -->  B(Hadoop)
B -->  C(Spark)
C -->  D(Flink)

各阶段特点

传统:单机模式、黑箱使用。

Hadoop:分布式、离线计算、Map-Reduce。

Spark:批处理、流处理、内存迭代计算,逐渐取代了Map-Reduce。

Flink:流计算、实时、流批一体。

2.Flink 整体架构

       Flink集群,主要包括两个核心组件:JM(JobManager)和TM(TaskManager)。

processes.svg 图源:Flink Architecture

       在执行过程中,Client端会将Program code中用户的代码经过处理会转换一个抽象的逻辑执行图(DAG图)并提交给JM,JM将其转化为具体的物理执行图,此外,JM还会根据物理执行图对应的任务调度把对应的task交给TM的Task Slot中去执行。

具体JM的执行步骤

JM中有着三个核心组件:Dispatcher、JobMaster、ResourceManager。

Snipaste_2022-07-26_14-16-56.png

图源:青训营课堂

       由Dispatcher接收Client提交的作业后,Dispatcher会通知JobMaster向ResourceManager申请资源,ResourceManager会调用k8s或yarn的API拉起一些TM资源,资源拉起后向ResourceManager注册,ResourceManager收到注册信息后会把该资源分配到JobMaster,JobMaster拿到资源后再把作业交给TM在其slot中执行。

关于TM

       每个TM是一个进程,每个TM中用户可以定义若干个Task Slot,每个Task Slot就相当于一个线程,在TM里每个Slot中的cpu、内存等资源没有严格的隔离。

三、总结

       通过本次课程,我了解到了Flink的架构以及在运行时其内部各组件的执行步骤。也了解到传统实时数仓、离线数仓的架构对于流处理以及批处理有着两套的系统,存在很大的缺陷,而Flink引擎架构可以做到流批一体处理,数据源导入到Kafka中,经过Flink Stream预处理将同样的一份数据同步到Hive仓库,仓库中的数据经过Flink Batch来进行离线处理,Flink Stream来进行实时处理,这样可以实现数据同源以及计算同源,使用同一套引擎,从而可以简化开发运维的成本。