Flink资源调度模型

作者:王刚,腾讯CSIG高级工程师

Flink 资源模型 / 调度设计

背景知识

首先,我们来简单回顾一下 Flink 作业的运行时模型,然后再来探讨在这种运行模型下,Flink 的资源模型和调度架构的设计和实现。

我们引用官网非常经典的一张图,来说明一个 Flink 流作业简化后的运行视图。

Tasks 和 Operator Chains (部分译自官网)

我们知道,一个 Flink 作业可以看做是由 Operators 组成的 DAG,一个 Operator 代表对数据流的进行的某个数据变化操作( Sources 和 Sinks 也是代表数据流流入和数据流流出的特殊Operator )。在实际的分布式运行中,Flink 会把符合聚合规则的相邻 Operator 的 SubTask 聚合成 Tasks,每一个 Task 都会被单独的线程执行。这种把多个 Operator 的 SubTask 聚合成 Tasks 优化通常非常有效:能有效减少线程间切换(相比单独的每个operator的每个subtask占用一个线程)、数据缓存的成本,从而在降低数据处理延迟的同时增加系统的吞吐。

下图代表了数据流在 Operator Chain 之后,会实际产生 5 个 SubTask,相应的需要 5 个并发线程来处理该数据流。

86311aa72cc092bd806107cdb2532d84.png

在此,我们简要的区分下 Task 和 SubTask 的异同:

Task Task 是 Flink Runtime 的运行的基本单元,Task 封装了一个 Operator 或 Operator Chain 的某一并行实例
SubTask 一个 SubTask 是负责处理某一数据流的一部分的 Task,SubTask 术语强调对于同一个 Operator 或 Operator Chain 这里有多个并行的 Tasks。

所以,一个 Flink 的作业,最终会转化为一个个 Task 在集群上运行。我们接下来从 Task 运行维度分析,一层层来看 Flink 的资源模型设计。

资源模型

首先,我们介绍 Flink 基本的几个运行时概念。

Flink Job:

Flink程序提交到Flink Cluster运行后,会生成一个或者多个Flink jobs。根据上文的介绍,我们知道一个Flink job其实是数据流变换的运行时抽象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值