ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Flink Parallelism 与 Slot 理解

2020-01-17 13:40:48  阅读:641  来源: 互联网

标签:Slot Flink TaskManager Parallelism 设置 算子 并行度


文章目录

what Parallelism Slot ?

parallelism 是并行的意思
slot 槽位的意思

先来看一张Flink官网中一张经典图
在这里插入图片描述
图中 TaskManager 是从 JobManager 处接收需要部署的 Task,任务能配置的最大并行度由 TaskManager 上可用的 Slot决定

Slot 和 Parallelism 的关系

1.Slot 是指 TaskManager 最大能并发执行的能力

Flink 配置文件中设置的一个 TaskManager 默认的Slot 是 1,
taskmanager.numberOfTaskSlots: 1 该参数可以根据实际情况做一定的修改。
在这里插入图片描述
如上图,如果设置的单个 TaskManager 的 Slot 个数为 3,启动 3 个 TaskManager 后,那么就一共有 9 个 Slot

2.parallelism 是指 TaskManager 实际使用的并发能力

  • 如果在你的 Flink Job 里面不设置任何 parallelism 的话,那么它也会有一个默认的 parallelism(默认为1),那也意味着可以修改这个配置文件的默认并行度来提高 Job 的执行效率。如果是使用命令行启动你的 Flink Job,那么你也可以这样设置并行度(使用-p n 参数 flink run -p 10)
  • 也可以通过 env.setParallelism(n) 来设置整个程序的并行度: env.setParallelism(10);
    这样设置的并行度是整个程序的并行度,那么后面如果每个算子不单独设置并行度覆盖的话,那么后面每个算子的并行度就都是以这里设置的并行度为准了
  • 给每个算子设置并行度
data.keyBy(new xxxKey())
    .flatMap(new XxxFlatMapFunction()).setParallelism(5)
    .map(new XxxMapFunction).setParallelism(5)
    .addSink(new XxxSink()).setParallelism(1)

如上就是给每个算子单独设置并行度,这样的话,就算程序设置了 env.setParallelism(10)
也是会被覆盖的。这也说明优先级是:算子设置并行度 > env 设置并行度 > 配置文件默认并行度

在这里插入图片描述
运行程序默认的并行度为 1,9 个 Slot 只用了 1 个,有 8 个处于空闲,设置合适的并行度才能提高 Job 计算效率。

parallelism 是可配置、可指定的在这里插入图片描述
上图中 example2 每个算子设置的并行度是 2, example3 每个算子设置的并行度是 9在这里插入图片描述
example4 除了 sink 是设置的并行度为 1,其他算子设置的并行度都是 9

总结

Slot 在Flink里面可以任务是资源组,Flink将每个热舞分成子任务并且将这些子任务分配到Slot中,这样就可以并行的执行程序
如果 TaskManager 有四个 Slot,那么它将为每个 Slot 分配 25% 的内存。 可以在一个 Slot 中运行一个或多个线程。 同一Slot 中的线程共享相同的 JVM。 同一 JVM 中的任务共享 TCP 连接和心跳消息。TaskManager 的一个 Slot代表一个可用线程,该线程具有固定的内存,注意 Slot 只对内存隔离,没有对 CPU 隔离。默认情况下,Flink 允许子任务共享 Slot,即使它们是不同Task 的 subtask,只要它们来自相同的 Job,这种共享模式可以大大的提高资源利用率

上图有两个TaskManager每个TM有3个Slot,这样我们的算子最大并行度就是6个,同一个Slot里面可以执行1至多个子任务。
图中 source/map/keyby/window/apply 算子可以设置最大6个并行度,sink只设置了1个并行度。

冬瓜螺旋雪碧 发布了60 篇原创文章 · 获赞 27 · 访问量 1万+ 私信 关注

标签:Slot,Flink,TaskManager,Parallelism,设置,算子,并行度
来源: https://blog.csdn.net/kzw11/article/details/104016868

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有