Flink 任务 Tasks 和 任务槽 Task Slots
所属分类 flink
浏览量 65
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 说明