这是我参与「第四届青训营」笔记创作活动的第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)。
在执行过程中,Client端会将Program code中用户的代码经过处理会转换一个抽象的逻辑执行图(DAG图)并提交给JM,JM将其转化为具体的物理执行图,此外,JM还会根据物理执行图对应的任务调度把对应的task交给TM的Task Slot中去执行。
具体JM的执行步骤
JM中有着三个核心组件:Dispatcher、JobMaster、ResourceManager。
图源:青训营课堂
由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来进行实时处理,这样可以实现数据同源以及计算同源,使用同一套引擎,从而可以简化开发运维的成本。