flink容器(Flink--对parallelism和slot的理解)

./bin/flink run -p 10 ../word-count.jar ,我来为大家讲解一下关于flink容器?跟着小编一起来看一看吧!

flink容器(Flink--对parallelism和slot的理解)

flink容器

概述
  • parallelism指的是并行度的意思。在 Flink 里面代表每个任务的并行度,适当的提高并行度可以大大提高 job 的执行效率,比如你的 job 消费 kafka 数据过慢,适当调大可能就消费正常了。
  • slot指的是插槽的意思,flink中任务的并行性由每个 Task Manager 上可用的 slot 决定。
如何设置flink job的parallelism
  • 在flink的配置文件中flink-conf.yaml,默认的并行度为1;
  • 在以shell的方式提交flink job的时候,可以使用-p指定程序的并行度;

./bin/flink run -p 10 ../word-count.jar

  • 在flink job程序内设置并行度

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setParallelism(10);

注意:这样设置的并行度是你整个程序的并行度,那么后面如果你的每个算子不单独设置并行度覆盖的话,那么后面每个算子的并行度就都是这里设置的并行度的值了。

  • 每个算子指定并行度;

data.keyBy(new xxxKey()) .flatMap(new XxxFlatMapFunction()).setParallelism(5) .map(new XxxMapFunction).setParallelism(5) .addSink(new XxxSink()).setParallelism(1)

  • 并行度设置优先级是:算子设置并行度 > env 设置并行度 > 配置文件默认并行度
如何理解flink中的slot
  • flink-conf.yaml中默认taskmanager.numberOfTaskSlots=1;
  • 以flink架构模型为例进行分析: flink-model.jpg
  • 图中 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。这种共享可以有更好的资源利用率。
  • 以官网上的thread process为例说明一下 taskmanager.jpg
  • 上面图片中有两个 Task Manager,每个 Task Manager 有三个 slot,这样我们的算子最大并行度那么就可以达到 6 个,在同一个 slot 里面可以执行 1 至多个子任务。
  • 那么再看上面的图片,source/map/keyby/window/apply 最大可以有 6 个并行度,sink 只用了 1 个并行。
  • 每个 Flink TaskManager 在集群中提供 slot。 slot 的数量通常与每个 TaskManager 的可用 CPU 内核数成比例。一般情况下你的 slot 数是你每个 TaskManager 的 cpu 的核数。
parallelism与slot的区别
  • 1-slot 是指 taskmanager 的并发执行能力; slot-taskmanager.jpg
  • 如上图所示:taskmanager.numberOfTaskSlots:3;即每一个 taskmanager 中的分配 3 个 TaskSlot, 3 个 taskmanager 一共有 9 个 TaskSlot。
  • 2-parallelism 是指 taskmanager 实际使用的并发能力 parallelism-taskmanager.jpg
  • 如上图所示:parallelism.default:1;即运行程序默认的并行度为 1,9 个 TaskSlot 只用了 1 个,有 8 个空闲。设置合适的并行度才能提高效率。
  • 3-parallelism 是可配置、可指定的; example-1.jpg
  • 上图中 example2 每个算子设置的并行度是 2, example3 每个算子设置的并行度是 9。 example-4.jpg
  • example4 除了 sink 是设置的并行度为 1,其他算子设置的并行度都是 9。
,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页