Flink整体架构| 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第6天
Flink分层架构(各个模块的用途)
Flink分层架构图
- SDK层:Flink的SDK目前主要有三类,SQL/Table、DataStream、Python;
- 执行引擎层(Runtime层):执行引擎层提供了统一的 DAG,用来描述数据处理的 Pipeline,不管是流还是批,都会转化为DAG图,调度层再把 DAG转化成分布式环境下的Task,Task 之间通过Shuffle传输数据;
- 状态存储层:负责存储算子的状态信息;
- 资源调度层:目前Flink可以支持部署在多种环境。
Flink总体架构
一个Flink集群,主要包含以下两个核心组件:
- JobManager (JM)∶负责整个任务的协调工作,包括:调度task、触发协调Task做 Checkpoint、协调容错恢复等;
- TaskManager (TM)︰负责执行一个DataFlowGraph的各个task以及 data streams的 buffer和数据交换。
JobManager职责
Dispatcher: 接收作业,拉起JobManager来执行作业,并在JobMaster挂掉之后恢复作业;
JobMaster: 管理一个job的整个生命周期,会向ResourceManager申请slot,并将task调度到对应TM上;
ResourceManager:负责 slot资源的管理和调度,Task manager拉起之后会向RM注册;
管理一个作业的整体的生命周期
并且会在Flink中的JM/RM——负责所有的资源的管控
JM去申请资源——这些资源在Flink里有一个task的概念(可以认为是一个一个插槽),
在如上图的这个RM,比如说我们是运行在K8S上调用K8S或者Yean的api去收集资源。
流式的WordCount示例,从kafka中读取一个实时数据流,每10s统计一次单词出现次数, DataStream实现(JAVA)代码如下:
分析代码:
- 声明一个Flink的环境变量:即声明从flinkkafka调取数据——基本单位一个String
- map即一条处理,每次调用一个line都会与之相应的附带一个处理(parse)变成event格式
- KeyBy用来统计单词出现次数,apply——一个聚合函数统计频次,定义Statistics
- add,将结果打印输出

浙公网安备 33010602011771号