Flink 是一个分布式系统,需要有效分配和管理计算资源才能执行流应用程序。它集成了所有常见的集群资源管理器,例如Hadoop YARN,但也可以设置作为独立集群甚至库运行。本文概述了 Flink 架构,并且描述了主要组件及作用。Flink由两种类型的进程组成:一个 JobManager 和一个或者多个 TaskManager。

基于flink实时报表最快时延 flink怎么做到实时_基于flink实时报表最快时延

Client 不是运行时和程序执行的一部分,而是用于准备数据流并将其发送给 JobManager。之后,客户端可以断开连接(分离模式),或保持连接来接收进程报告(附加模式)。客户端可以作为触发执行 Java/Scala 程序的一部分运行,也可以在命令行进程./bin/flink run ...中运行。可以通过多种方式启动 JobManager 和 TaskManager:直接在机器上作为standalone 集群启动、在容器中启动、或者通过YARN等资源框架管理并启动。TaskManager 连接到 JobManagers,宣布自己可用,并被分配工作。

、JobManager

JobManager 具有许多与协调 Flink 应用程序的分布式执行有关的职责:它决定何时调度下一个 task(或一组 task)、对完成的 task 或执行失败做出反应、协调 checkpoint、并且协调从失败中恢复等等。这个进程由三个不同的组件组成:

1.ResourceManager

ResourceManager 负责 Flink 集群中的资源提供、回收、分配 - 它管理 task slots,这是 Flink 集群中资源调度的单位(请参考TaskManagers)。Flink 为不同的环境和资源提供者(例如 YARN、Kubernetes 和 standalone 部署)实现了对应的 ResourceManager。在 standalone 设置中,ResourceManager 只能分配可用 TaskManager 的 slots,而不能自行启动新的 TaskManager。

2.Dispatcher

Dispatcher 提供了一个 REST 接口,用来提交 Flink 应用程序执行,并为每个提交的作业启动一个新的 JobMaster。它还运行 Flink WebUI 用来提供作业执行信息。

3.JobMaster

JobMaster 负责管理单个JobGraph的执行。Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster。

始终至少有一个 JobManager。高可用(HA)设置中可能有多个 JobManager,其中一个始终是 leader,其他的则是 standby。

二、TaskManagers

TaskManager(也称为 worker)执行作业流的 task,并且缓存和交换数据流。

必须始终至少有一个 TaskManager。在 TaskManager 中资源调度的最小单位是 task slot。TaskManager 中 task slot 的数量表示并发处理 task 的数量。请注意一个 task slot 中可以执行多个算子(请参考Tasks 和算子链)。

TaskManager 包含以下模块:

PermanentBlobService:可恢复,数据会上传到 BlobStore 分布式文件系统。

TransientBlobService:不可恢复,数据不会上传到 BlobStore 分布式文件系统。

  1. TaskSlotTable:TaskSlotTable 是管理 TaskSlot,其生命周期与 TaskManager 保持一致。TaskSlotTable 主要功能有添加和获取 Task、申请和释放 Slot。
  2. JobLeaderService:JobLeaderService 用于监听 Master。如果 Master 节点改变,会通知 JobLeaderService,内部是以 jobId 为 key 保存 LeaderRetrievalService 和 JobManagerLeaderListener。
  3.  ResourceManager:ResourceManager 用于监听 ResourceManager 主节点。如果主节点有变化,会通知 ResourceManagerLeaderRetriever。
  4. HeartbeatManager:此模块包含 JobManagerHeartbeatManager 和 ResourceManagerHeartbeatManager 的心跳检测。
  5. BlobCacheService:BlobService 包含 PermanentBlobService 和 TransientBlobService。

总结

JobManager 是一个 Flink 集群中任务管理和调度的核心,是控制应用执行的主进程。也就是说,每个应用都应该被唯一的 JobManager 所控制执行。TaskManager 是 Flink 中的工作进程,数据流的具体计算就是它来做的,所以也被称为 “Worker”。Flink 集群中必须至少有一个 TaskManager;当然由于分布式计算的考虑,通常会 有多个 TaskManager 运行。