flink架构设计
架构设计图 官方给出的为三层结构,其中Deploy层负责解决flink的部署问题,runtime层是flink的核心实现层,api和libraries面向编程人员。
flink运行模式
本地运行模式(local) 脱机运行模式(standalone) 集群运行模式(flink on yarn/mesos/kubernetes等资源管理平台) 其中集群运行模式又分为三种 ??会话模式(session) ??工作模式(per-job) ??应用模式(application)
本地运行模式主要用于代码测试,一个机器启动一个进程的多线程来模拟分布 脱机运行模式主要用于纯Flink纯计算的场景,商用场景极少。 集群运行模式是重点 ??会话模式,提前开启一个 工作管理者(job manager),多个 任务(task)都由一个 任务管理者(task manager)管理,而所有的 任务管理者 都向 工作管理者 汇报消息 ????优点:可以节省大量申请资源和启动 任务管理者 的时间,当 任务 持续时间较短并且需要频繁的创建时适合使用 ????缺点:没有很好的资源隔离性,即当 工作管理者 发生错误时,会导致集群中所有运行着的 任务 失败,当 任务管理者 发生错误时,会导致所有由该 任务管理者 管理的 任务 失败。 ????工作流程示意图
??工作模式,每当有一个 任务 被提交时,会启动一个 flink工作集群 并将这个任务提交给 分发器(dispatcher),根据 任务 的资源请求去分配 任务管理者 ,当 任务 完成时,将会拆掉 flink工作集群 ????优点:当 工作管理者 发生错误时,只会影响到 flink工作集群 中运行的一个 任务 ????缺点:每一个 任务 都需要申请资源,浪费时间,以至于实时性不是很好 ????工作流程示意图 ??应用模式,算是前面两种模式的折中,将程序和依赖打包成一个可执行的 任务jar包 ,入口机的客户端把该jar包和需要的资源提交到hdfs中,由 工作管理者 拉取所有资源,如果 工作管理者 设置了 高可用性 (HA),会同时启动多个 工作管理者 并选出一个性能最好的,保障能顺利执行,通过main方法提取 工作图(job graph)来和集群交互。 ????优缺点:资源隔离性比会话模式强比工作模式弱,实时性上比工作模式强比会话模式弱(ps:为什么实时性比工作模式强,因为工作模式相当于在入口机就执行代码,而入口机是可以被多个人访问,并且入口机计算效率没有集群高,毕竟双拳难敌四手,集群可是多台机器组合而成) ????应用场景:实时性要求不太高、安全性有一定要求均可以使用,普遍适用性最强
flink工作流程
核心角色:工作管理者(job manager)、任务管理者(task manager) 工作流程图 客户端(client) 不是运行时和程序执行的一部分,而是用于准备数据流并将其发送给 工作管理者 (job manager),提交任务完成之后 客户端 可以选择分离模式关闭,或者是附加模式,用于保持连接接收 任务 进程报告
扮演者系统(actor system) 是各个角色或组件之间相互通信的、消息传递的系统中间件, 扮演者(actor) 是一种并发编程模型,所有的线程或进程通过消息传递的方式进行合作和通信,这些线程或进程称为 扮演者 ,该系统以简单、高效著称,唯一的缺点是不能实现真正意义上的并行, 而是通过并发实现的并行效果,会存在一定的不确定性
工作管理者(job manager) 具有许多与协调flink应用程序的分布式执行有关的职责:它决定何时调度下一个 任务 或一组 任务 ,并对完成或者执行失败的 任务 做出反应、协调 检查点(checkpoint) ,并且协调从失败中恢复等,这个进程由三个不同的组件组成,分别是 资源管理者(resource manager) 、 分发器(dispatcher) 、 工头(job master)
资源管理者(resource manager) 负责flink集群中的资源提供、回收、分配,管理 任务插槽(task slots) ,是flink集群中资源调度的最小单位。flink为不同的环境和资源提供者(如 YARN、Mesos、Kubernetes 和 standalone 部署)实现了对应的 资源管理者 。在 脱机(standalone) 设置中, 资源管理者 只能分配可用 任务管理者(task manager) 的 插槽(slots),而不能自行启动新的 任务管理者
分发器(dispatcher) 提供了一个 REST 接口,用来提交flink应用程序执行,并为每个提交的作业启动一个新的 工头 ,运行 Flink WebUI 用来提供作业执行信息
工头(job master) 负责管理单个 工作图(job graph) 的执行。 flink 集群中可以同时运行多个作业,每个作业都有自己的 工头
任务管理者(task manager) 执行作业流的 任务(task) ,并缓存和交换数据流,必须始终至少有一个 任务管理者 。在 任务管理者 中资源调度的最小单位是 任务插槽(task slot) 。 任务管理者 中 任务插槽 的数量表示并发处理 任务 的数量,一个 任务插槽 中可以执行多个算子。
附加,yarn提交任务的工作流程图
|