Flink 计算资源笔记

本文深入探讨Flink中的TaskManager资源分配、算子chain优化条件、slot与slotgroup概念及共享策略,揭示Flink作业调度的核心机制,帮助理解如何优化Flink作业执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考博客

1.TaskManager通过solt个数划分资源,但是这里的资源仅仅是内存资源不包括CPU
2.Flink Job任务时会对算子进行chain优化,目的是共享线程减少线程切换的开销并提升执行性能。chain后的算子对外而言就是一个算子,内部算子之间的数据流通,不会经过序列化/反序列化、网络传输,而是直接将消息对象传递给下游的 ChainOperator 处理 。chain是有条件的:
   1)上下游的并行度一致
   2)下游节点的入度为1 (也就是说下游节点没有来自其他节点的输入)
   3)上下游节点都在同一个 slot group 中(下面会解释 slot group)
   4)下游节点的 chain 策略为 ALWAYS(可以与上下游链接,map、flatmap、filter等默认是ALWAYS)
   5)上游节点的 chain 策略为 ALWAYS 或 HEAD(只能与下游链接,不能与上游链接,Source默认是HEAD)
   6)两个节点间数据分区方式是 forward
   7)用户没有禁用 chain
3.所有的算子默认slot group为'default'。可以通过slotSharingGroup()设置组名。
4.两个算子并行度一致则为forward,不一致则是Rebalance,有keyby则为hash。在每个算子后可明确设置分区方式forward,Rebalance,shuffle。
5.operator设置为并行运行,每一个线程就是一个subtask
6.每个TaskManager 只一个slot,也就意味着每个task运行在独立的 JVM 中。每个 TaskManager 有多个slot的话,也就是说多个task运行在同一个JVM中。而在同一个JVM进程中的task,可以共享TCP连接(基于多路复用)和心跳消息,可以减少数据的网络传输。也能共享一些数据结构,一定程度上减少了每个task的消耗。因为每个TaskManager 只一个slot,一个TaskManager=一个JVM所以才会说每个Task运行在独立的JVM中。
7.SlotSharingGroup意味着Flink 允许subtasks共享slot,条件是它们都来自同一个Job的不同task的subtask。也就是说同一个operator可能因为并行度的关系有多个SubTask,但是这些SubTask不能存在同一个slot中。这样带来的好处就是可能一个slot中可以运行这个job整个的pipeline。而且job占用的solt数和job的最高并发保持一致(只有不同的task的subtask才能共享slot)。
8.关于Flink调度,有两个非常重要的原则我们必须知道:(1)同一个operator的各个subtask是不能呆在同一个SharedSlot中的,例如FlatMap[1]FlatMap[2]是不能在同一个SharedSlot中的。(2)Flink是按照拓扑顺序从Source一个个调度到Sink的。所以在source并行度为1的情况下,solt1有完整的pipeline,而slot2只有部分的pipeline.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值