概述💨
Flink是构建在数据流之上的有状态计算的流计算框架,通常被⼈们理解为是 第三代 ⼤数据分析⽅案。
- 第⼀代:Hadoop的MapReduce计算(静态)、Storm流计算(2014.9) ;两套独⽴计算引擎,使⽤难度⼤
- 第⼆代:Spark RDD 静态批处理(2014.2)、DStream|Structured Streaming 流计算;统⼀计算引擎,难度系数⼩
- 第三代 : Flink DataStream(2014 .12) 流计算框架、Flink Dataset 批处理;统⼀计算引擎,难度系数不低也不⾼
可以看出Spark和Flink⼏乎同时诞⽣,但是Flink之所以发展慢,是因为早期⼈们对⼤数据的分析的认知不够深刻或者当时业务场景⼤都局限在批处理领域,从⽽导致了Flink的发展相⽐较于Spark较为缓慢,直到2016年⼈们才开始慢慢的意识流计算的重要性。
流计算领域:系统监控、舆情监控、交通预测、国家电⽹、疾病预测、银⾏/⾦融⻛控等。
Flink基本概念
Task和Operator Chain
Flink是⼀个分布式流计算引擎,该引擎将⼀个计算job拆分成若⼲个Task(等价于Spark中的Stage),每个Task都有⾃⼰的并⾏度,每个并⾏度都由⼀个线程表示,因为⼀个Task是并⾏执⾏的,因此⼀个Task底层对应⼀系列的线程,Flink称为这些线程为该Task的subtask。与Spark不同的地⽅在于Spark是通过RDD的依赖关系实现Stage的划分⽽Flink是通过 OperatorChain 的概念实现Task的拆分。所谓的OperatorChain 指的是Flink在做job编织的时候,尝试将多个操作符算⼦进⾏串联到⼀个Task中,以减少数据的线程到线程传输的开销,⽬前Flink常⻅的Operatorchain的⽅式有两种:forward、hash|rebalance.

- Task - 等价spark中的Stage,每个Task都有若⼲个SubTask
- SubTask - 等价⼀个线程,是Task中的⼀个⼦任务
- OperatorChain - 将多个算⼦归并到⼀个Task的⼀种机制,归并原则类似SparkRDD的宽窄依赖
JobManagers、TaskManagers、Clients
- JobManagers - (也称为master)负责协调分布式执⾏。负责任务调度,协调检查点,协调故障恢复等,等价于Spark中的Master+Driver的功能。通常⼀个集群中⾄少有1个Active的JobManager,如果在HA模式下其他处于StandBy状态。
- TaskManagers - (称为Worker) 真正负责Task执⾏计算节点,同时需要向JobManager汇报⾃身状态信息和⼯作负荷。通常⼀个集群中有若⼲个TaskManager。
- client -与Spark不同,Flink中的Client并不是集群计算的⼀部分,Client仅仅负责提交任务的Dataflow Graph给JobManager,提交完成之后,可以直接退出。因此该Client并不负责任务执⾏过程中调度。

Task Slots和Resources
每⼀个Worker(TaskManager)是⼀个JVM进程,可以执⾏⼀个或者多个⼦任务(Thread/SubTask)为了控制Worker节点能够接受多个Task任务,Worker提出所谓Task slot⽤于表达⼀个计算节点的计算能⼒(每个计算节点⾄少有⼀个Task slot)。每个TaskSlot表示的是TaskManager计算资源的固定⼦集。例如:如果⼀个TaskManager拥有3个TaskSlot,则每个Task Slot表示占⽤当前TaskManager的进程的1/3内存资源。每个Job(计算)启动的时候都拥有⾃⼰的固定的Task Slot,也就意味着避免了不同job间的在运⾏时产⽣内存资源抢占。这些被分配的Task Slot资源只能被当前job的所有Task所使⽤,不同Job的Task之间不存在资源共享和抢占问题。但是⼀个Job会被拆分成若⼲个Task,每个Task由若⼲个SubTask构成(取决于Task并⾏度)。默认Task Slot所对应的内存资源只能在同⼀个Job下的不同Task的subtask间进⾏共享,也就意味着同⼀个Task的不同subtask不能运⾏在同⼀个Taskslot中,但是如果是相同的job的不同Task的SubTask却可以。
如果同⼀个Job的不同Task的subtask不共⽤slot,会导致资源浪费。例如下图中 source、map 操作定位为资源稀疏性操作,因为该操作占⽤内存量⼩,⽽ keyBy/windows()/apply()涉及Shu!le会占⽤⼤量的内存资源,定位为资源密集型操作,⽐较吃内存。

因此Flink底层默认做的是不同Task的⼦

最低0.47元/天 解锁文章
773

被折叠的 条评论
为什么被折叠?



