slots是什么意思(Flink--对parallelism 和 slot的理解)


概述
  • 并行是指平行。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); 注:这样设置的并行度就是你整个程序的并行度。然后,如果您的每个操作符没有单独设置并行度覆盖,那么每个操作符的并行度将是此处设置的并行度的值。

    ots是什么意思

  • 每个运算符指定并行度;
  • 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。
  • 您可以还会对下面的文章感兴趣

    使用微信扫描二维码后

    点击右上角发送给好友