Flink整体架构| 青训营笔记

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

Flink分层架构(各个模块的用途)

Flink分层架构图

image-20220728153447819

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

Flink总体架构

image-20220728155130670

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

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

JobManager职责

image-20220728155917348

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)代码如下:

image-20220729142601864

分析代码:

  1. 声明一个Flink的环境变量:即声明从flinkkafka调取数据——基本单位一个String
  2. map即一条处理,每次调用一个line都会与之相应的附带一个处理(parse)变成event格式
  3. KeyBy用来统计单词出现次数,apply——一个聚合函数统计频次,定义Statistics
  4. add,将结果打印输出
posted @ 2022-07-30 10:55  Luciferpluto  阅读(1)  评论(0)    收藏  举报  来源