赞
踩
Flink Runtime 层的主要架构如下图所示,它展示了一个 Flink 集群的基本结构。整体来说,它采用了标准 master-slave 的结构,master负责管理整个集群中的资源和作业;TaskManager 则是 Slave,负责提供具体的资源并实际执行作业。
Master 部分包含三个组件:Dispatcher、ResourceManager 和 JobManager。
作业执行基本流程:
Flink 支持两种作业执行的模式:
在 Flink 中,资源是通过 Slot 来表示的,每个 Slot 可以用来执行不同的 Task。任务即 Job 中实际的 Task,它包含了待执行的用户逻辑。
调度的主要目的就是为了给 Task 找到匹配的 Slot。
在 ResourceManager 中,有一个子组件叫 SlotManager,它维护了集群中所有TaskManager 上 Slot 的信息和状态,如 slot 当前是否空闲等。
资源交互过程:
除了正常通信逻辑外,在 ResourceManager 和 TaskManager 之间还存在定时的心跳信息来同步 Slot 的状态。如果长时间未收到对方的心跳,就认为对应的组件已经失效,并进入到 Failover 的流程。
共享Slot
默认情况下,Flink 允许 subtasks 共享 slot,条件是它们都来自同一个 Job 的不同 task 的subtask。结果可能一个 slot 持有该 job 的整个 pipeline。
允许 slot 共享有以下两点好处:
SlotSharingGroup 设置算子的 Slot 共享组。Flink 会将具有相同 Slot 共享组的算子放在同一个 Slot 中,而将没有 Slot 共享组的算子保留在其他 Slot 中,这可用于隔离 Slot 。默认 Slot 共享组的名称是“default”,可以通过调用 算子.slotSharingGroup(“default”) 将算子显示放入该组。
Flink 中两种基本的调度策略
在一个 Flink Job 中是包含多个 Task 的,因此关键的问题是在 Flink 中按什么顺序来调度 Task。
目前 Flink 提供了两种基本的调度逻辑,即 Eager 调度与 Lazy From Source。
在 Flink 作业的执行过程中,除正常执行的流程外,还有可能由于环境等原因导致各种类型的错误。整体上来说,错误可能分为两大类:Task 执行出现错误或 Flink 集群的 Master 出现错误。由于错误不可避免,为了提高可用性,Flink 需要提供自动错误恢复机制来进行重试。
对于 Task 执行错误,Flink 提供的错误恢复策略:
对于 Flink 集群的 Master 发生异常:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。