概述并行是指平行。Flink表示每个任务的并行性。适当增加并行度可以大大提高作业的执行效率。比如你的工作消耗kafka数据太慢,适当增加消耗可能是正常的。Slot就是槽的意思,flink中任务的并行性是由每个任务管理器上可用的槽决定的。如何设置flink job的parallelism在flink的配置文件flink-conf.yaml中,默认并行度为1;shell提交flink作业时,可以用-p指定程序的并行性;。/bin/flickrun-p10../word-count.jar
设置flickjob程序中的并行度。
StreamExecutionEnvironment env = StreamExecutionEnvironment . getexecutionenvironment();
env . setparallelism(10);
注:这样设置的并行度就是你整个程序的并行度。然后,如果您的每个操作符没有单独设置并行度覆盖,那么每个操作符的并行度将是此处设置的并行度的值。

每个运算符指定并行度;data.keyBy(new xxxKey())
。flatMap(新的XxxFlatMapFunction())。setParallelism(5)
。地图(新XxxMapFunction)。setParallelism(5)
。addsink (newxxxsink())。设置并行度(1)
并行度设置的优先级为:操作员设置并行度>:环境设置并行度>:配置文件默认并行度如何理解flink中的slot
Taskmanager。在flink-conf.yaml中默认numberoftaskslots = 1;以弗林克建筑模型为例:
flink-model.jpg在图中,任务管理器从作业管理器接收要部署的任务,任务的并行性由每个任务管理器上可用的槽决定。每个任务代表分配给任务槽的一组资源。在Flink中,插槽可以被视为一个资源组。Flink将每个任务分成子任务,并将这些子任务分配给slot并行执行程序。例如,如果任务管理器有四个插槽,它将为每个插槽分配25%的内存。您可以在一个插槽中运行一个或多个线程。同一个插槽中的线程共享同一个JVM。同一JVM中的任务共享TCP连接和心跳消息。任务管理器的一个槽代表一个可用的线程,它有固定的内存。注意Slot只隔离内存,不隔离CPU。默认情况下,Flink允许子任务共享Slot,即使它们是不同任务的子任务,只要它们来自同一个作业。这种共享可以有更好的资源利用率。以官网的跟帖流程为例来说明
taskmanager.jpg。在上图中,有两个任务管理器,每个都有三个槽,这样我们的操作符的最大并行度可以达到六,一个或多个子任务可以在同一个槽中执行。然后看上图,source/map/keyby/window/apply的最大并行度可以是6,sink只用一个并行度。每个Flink TaskManager在集群中提供一个插槽。插槽的数量通常与每个TaskManager可用的CPU内核数量成比例。通常,您的插槽号是每个TaskManager的cpu核心数。parallelism与slot的区别1-slot指taskmanager的并发执行能力;
slot-taskmanager.jpg如上图所示:task manager . numberoftaskslots:3;也就是说,每个taskmanager中分配了三个task lot,三个task manager中有九个task lot。2-并行性是指taskmanager实际使用的并发parallelism-taskmanager.jpg
。如上图:平行度。默认:1;即运行程序的默认并行度为1,9个TaskSlot只使用一个,空闲有8 空个。设置适当的并行度可以提高效率。3-并行性是可配置和可指定的;
example-1.jpg在上图中,示例2中每个操作员设置的并行度是2,示例3中每个操作员设置的并行度是9。
example-4.jpg例4除了sink设置为1,其他运算符的并行度都设置为9。