首页  

Flink 任务 Tasks 和 任务槽 Task Slots     所属分类 flink 浏览量 77
Flink 中每一个 worker(也就是 TaskManager)都是一个 JVM 进程,它可以启动多个独立的线程,来并行执行多个子任务(subtask)

为了控制并发量,需要在 TaskManager 上对每个任务运行所占用的资源做出明确的划分,这就是 任务槽(task slots)

每个任务槽(task slot)其实表示了 TaskManager 拥有计算资源的一个固定大小的子集。这些资源就是用来独立执行一个子任务的。

假如一个 TaskManager 有三个 slot,那么它会将管理的内存平均分成三份,每个 slot 独自占据一份。
在 slot 上执行一个子任务时,相当于划定了一块内存“专款专用”,就不需要跟来自其他作业的任务去竞争内存资源了。
所以现在只要 2 个 TaskManager,就可以并行处理分配好的 5 个任务了,

一个JVM进程可以有多个线程,假如有1GB内存,分给三个部分(slot),那就是每个333.3MB

集群配置文件 配置  TaskManager 的 slot 数量
taskmanager.numberOfTaskSlots: 3

注意:slot 目前仅仅用来隔离内存,不会涉及 CPU 的隔离。
在具体应用时,可以将 slot 数量配置为机器的 CPU 核心数,尽量避免不同任务之间对 CPU 的竞争。
这也是开发环境默认并行度设为机器 CPU 数量的原因。

任务对任务槽的共享
默认情况下,Flink 允许子任务共享 slot 。
只要属于同一个作业,不同任务节点的并行子任务,可以放到同一个 slot 上执行。
一个jobManager有三个小弟taskManager,每个TaskManager有三个slot,
假设有一个任务需要4个slot,Job把它分给A,B两个TaskManager,A,B同一个job,所以B可以使用A的计算资源


任务槽和并行度的关系
task slot 是静态的概念 , 是指TaskManager具有的并发执行能力 , 可以通过参数taskmanager.numberOfTaskSlots 进行配置
并行度(parallelism)是动态概念,也就是TaskManager 运行程序时实际使用的并发能力,可以通过参数 parallelism.default 进行配置


flinkcdc3.2.0 + mysql doris connector 3.1.0 数据同步 并行度设置 实例 pipeline: name: sync_000 parallelism: 3 Source: Flink CDC Event Source: mysql -> SchemaOperator -> PrePartition Parallelism: 3 PostPartition -> Sink Writer: Flink CDC Event Sink: doris Parallelism: 3 总共6个任务 ,占用3个slot taskmanager.numberOfTaskSlots: 3 每个taskmanager 3个 slot Path pekko.tcp://flink@192.168.1.10:43675/user/rpc/taskmanager_0 All Slots 3 Free Slots 0 Last Heartbeat 2024-09-19 08:39:18 Data Port 33925 CPU Cores 8 Physical Memory 15.7 GB JVM Heap Size 3.71 GB Flink Managed Memory 3.20 GB
pekko.tcp://flink@192.168.1.10:43675/user/rpc/taskmanager_0 Flink1.18版本内部RPC通信封装用的是Apache Pekko , Apache Pekko是Akka 2.6.x的一个分支 , Akka将来Apache许可证更改为Business Source License (BSL) v1.1,该协议不是开源的

上一篇     下一篇
flinkcdc3 数据同步测试

flink currentEmitEventTimeLag

flink集群停止和启动

CDC Change Data Capture

dolphinscheduler配置说明

Sec-WebSocket-Key 说明