[Flink]Flink章4 Flink应用开发 --- slot and parallelism

先看看slot

任务槽(Task slot)

1.flink的TM就是运行在不同节点上的JVM进程(process),这个进程会拥有一定量的资源。比如内存,cpu,网络,磁盘等。flink将进程的内存进行了划分到多个slot中.图中有2个TaskManager,每个TM有3个slot的,每个slot占有1/3的内存。

2.内存被划分到不同的slot之后可以获得如下好处。

a.TaskManager最多能同时并发执行的任务是可以控制的,那就是3个,因为不能超过slot的数量。

b.slot有独占的内存空间,这样在一个TaskManager中可以运行多个不同的作业,作业之间不受影响。

c.slot之间可以共享JVM资源, 可以共享Dataset和数据结构,也可以通过多路复用(Multiplexing)

共享TCP连接和心跳消息(Heatbeat Message)。

 

槽共享(slot Sharing)

1.flink默认允许同一个job下的subtask可以共享slot.

2.这样可以使得同一个slot运行整个job的流水线(pipleline)

3.槽共享可以获得如下好处:

a.只需计算Job中最高并行度(parallelism)的task slot,只要这个满足,其他的job也都能满足。

b.资源分配更加公平,如果有比较空闲的slot可以将更多的任务分配给它。图中若没有任务槽共享,负载

不高的Source/Map等subtask将会占据许多资源,而负载较高的窗口subtask则会缺乏资源。

c.有了任务槽共享,可以将基本并行度(base parallelism)从2提升到6.提高了分槽资源的利用率。

同时它还可以保障TaskManager给subtask的分配的slot方案更加公平。

4.经验上讲Slot的数量与CPU-core的数量一致为好。但考虑到超线程,可以slotNumber=2*cpuCore.

这个概念和spark的中的概念一样,指的是并行度,在flink中代码每个任务的并行度,提供并行度,可以提高job的并行处理能力。

 

资源分配及使用 

Task Manager 是从 Job Manager 处接收需要部署的 Task,任务的并行性由每个 Task Manager 上可用的 slot 决定。每个任务代表分配给任务槽的一组资源,slot 在 Flink 里面可以认为是资源组,Flink 将每个任务分成子任务并且将这些子任务分配到 slot 来并行执行程序。

例如,如果 Task Manager 有四个 slot,那么它将为每个 slot 分配 25% 的内存。 可以在一个 slot 中运行一个或多个线程。 同一 slot 中的线程共享相同的 JVM。 同一 JVM 中的任务共享 TCP 连接和心跳消息。Task Manager 的一个 Slot 代表一个可用线程,该线程具有固定的内存,注意 Slot 只对内存隔离,没有对 CPU 隔离。默认情况下,Flink 允许子任务共享 Slot,即使它们是不同 task 的 subtask,只要它们来自相同的 job。这种共享可以有更好的资源利用率

 

 

parallelism配置

1.可以通过修改/conf/flink-conf.yaml文件的方式更改并行度。

2.可以通过设置/bin/flink 的-p参数修改并行度

3.可以通过设置executionEnvironmentk的方法修改并行度

4.可以通过设置flink的编程API修改过并行度

5.这些并行度设置优先级从低到高排序,排序为api>env>p>file.

6.设置合适的并行度,能提高运算效率

7.parallelism不能多与slot个数,最好是能够匹配的,如果少于slot会造成slot浪费,多于slot的话,会报错。

slot和parallelism关系

1.slot是静态的概念,是指taskmanager具有的并发执行能力

2.parallelism是动态的概念,是指程序运行时实际使用的并发能力

3.设置合适的parallelism能提高运算效率,太多了和太少了都不行

4.设置parallelism有多中方式,优先级为api>env>p>file

slot和taskManager关系

slot 属于某个taskManager,一个taskManager可以包含多个slot,默认的配置是一个taskManager里一个slot。如果我们有5个taskmanager,每个taskmanager设置的slot为2的话,那么我们的slot总数为5*2=10。通常slot 的数量与每个taskmanager节点的可用cpu 内核书成比例。

slot与cpu关系

flink的taskmanager提供处理槽slot,通常slot的数量是和每个taskmanager的可用cpu内核数成比例,一般情况你的slot数是你每个taskmanager的cpu核数,但是考虑到超线程,可以让slot的数量是CPUCore的倍数,如:slot numbers = cpuCore*n,假如有10个slot,那么cpu core可以是5 或者10。

slot与内存关系

我们一般在配置文件中或者在提交flink作业的时候,会指定taskmanager的内存大小,如我们指定taskmanager的内存大小为12g,每个taskmanager的slot数量指定为6,那么每个slot的内存大小是12/6=2。

posted on 2020-10-26 11:11  深圳私塾  阅读(479)  评论(0编辑  收藏  举报

导航