Flink的Slot概念

Slot决定了单个TaskManager并发执行能力

每个TaskManager都是一个 JVM 进程,可以在单独的线程中执行一个或多个 算子。为了控制一个 TaskManager 中接受多少个 算子,就有了slot(至少一个)。

每个 task slot 会分 TaskManager 中的资源。例如,TaskManager的slot为3,会将Flink的托管内存(用于 RocksDB State Backend 的本地内存和批的排序、哈希表、缓存中间结果的内存) 1/3 用于每个 slot。同一个TaskManager 中的不同slot不会CPU隔离,也不会相互竞争托管内存 ,而是一开始就一直占有各自的托管内存。

通过调整 task slot 的数量,用户可以定义 subtask 如何互相隔离。每个 TaskManager 有一个 slot,这意味着每个 task 组都在单独的 JVM 中运行(例如,可以在单独的容器中启动)。具有多个 slot 意味着更多 subtask 共享同一 JVM。同一 JVM 中的 task 共享 TCP 连接(通过多路复用)和心跳信息。它们还可以共享数据集和数据结构,从而减少了每个 task 的开销

Flink的Slot概念_第1张图片 

 

默认情况下,Flink 允许 subtask 共享 slot,即便它们是不同的 task 的 subtask,只要是来自于同一作业即可。结果就是一个 slot 可以持有整个作业管道。

你可能感兴趣的:(Flink实战,大数据,flink)