1. 四大组件的作用
作业管理器(JobManager):
JobManager 会向资源管理器(ResourceManager)
请求执行任务必要的资源,也就是任务管理器(TaskManager)上 的插槽(slot)
,一旦获取到足够的资源, 就会将 '执行图’发送到运行的他们的TaskManager
上,进行执行
资源管理器(ResourceManager):
主要负责管理任务管理器(TaskManager)的插槽(slot)
,TaskManger 插槽是 Flink 中 定义的处理资源单元
, 启动的taskManager需要向resourceManager进行注册插槽, 交给它进行管理,分配.
任务管理器(TaskManager):
- 真正执行任务的工作者, 每个taskManager上的
插槽(slot)
的数量限制了他的执行能力, 启动之后,会像资源管理器(ResourceManager)进行注册插槽
,一旦jobManager将执行图发送过来, 就让插槽(slot)
去进行执行任务 - 每个TaskManager都是一个独立的JVM进程
分发器(Dispatcher):
Dispatcher 也会启动一个 Web UI,用来方便地展示和监控作业执行的信息。Dispatcher 在架构中可能并不是必需的,这取决于应用提交运行的方式
注意: slot就是flink处理任务的资源单位,任务真正都由它来进行执行,它的数量,也决定了TaskManager的执行能力
我们可以通过下面的图,来看一下他们分别负责的是什么内容?
yarn模式下, 因为有资源调度平台,会不太一样:
Flink 任 务 提 交 后 , Client 向 HDFS 上 传 Flink 的 Jar 包 和 配 置 , 之 后 向 Yarn ResourceManager 提 交 任 务 , ResourceManager 分 配 Container 资 源 并 通 知 对 应 的 NodeManager 启动 ApplicationMaster,ApplicationMaster 启动后加载 Flink 的 Jar 包 和配置构建环境,然后启动 JobManager,之后 ApplicationMaster 向 ResourceManager 申 请 资 源 启 动 TaskManager , ResourceManager 分 配 Container 资 源 后 , 由 ApplicationMaster 通 知 资 源 所 在 节 点 的 NodeManager 启 动 TaskManager , NodeManager 加载 Flink 的 Jar 包和配置构建环境并启动 TaskManager,TaskManager 启动后向 JobManager 发送心跳包,并等待 JobManager 向其分配任务。
如下图: 摘抄之尚硅谷文档
2.小知识概念
slot概念:
Task Slot 是静态的概念,是指 TaskManager 具有的并发执行能力,可以通过参数 taskmanager.numberOfTaskSlots 进行配置;
并行度(parallelism)概念:
并行度 parallelism 是动态概念, 即 TaskManager 运行程序时实际使用的并发能力,可以通过参数 parallelism.default(默认的并发能力)进行配置,也可以在代码中,或者提交程序时,也可以指定
任务链概念:
相同的并行度的 one to one操作
, 且中间没有
进行任何的重分区
(比如聚合求和,是会进行hash分区的),那么执行图会将这两个算子整合成一个子任务, 但是这样的话, 如果当其中一个算子的操作过于复杂的话,再整合成一个的话,就会有压力, 我们可以在代码中,进行分开任务链,再单独指定slot资源
两个算子合成的任务拆分开:
disableChaining()方法将前后分开或者startNewChain()启动一个新的任务点
单独设置slot资源: 可以缓解slot压力
slotSharingGroup()方法
子任务共享slot:
默认情况下, flink的子任务是可以共享slot的,即使是不同的子任务,但前提就是他们必须来自同一个job(任务),也就是说,如果来了一个任务,它就只使用一个slot就可以了,
注意:slot的数量是会限制并行度的, 并行度的数量不可以超过的slot 的数量,不然程序是没有够多的资源的!!!