《基于Apache Flink的流处理》Part2

发布时间 2023-03-30 20:16:53作者: Shallowker

Apache Flink 架构

搭建Flink所需组件

Flink 的搭建需要四个不同组件,它们相互协作,共同执行流式应用。这些组件是:JobManager、ResourceManager、TaskManager 和 Dispatcher。Flink 本身是用 Java 和 Scala 实现的,因此所有组件都基于 Java 虚拟机(JVM) 运行。
它们各自的职责如下:

JobManager

作为主进程(master process),JobManager 控制着单个应用程序的执行。换句话说,每个应用都由一个不同的 JobManager 掌控。JobManager 可以接收需要执行的应用,该应用会包含一个所谓的 JobGraph,即逻辑 Dataflow 图,以及一个打包了全部所需类、库以及其他资源的 JAR 文件。JobManager 将 JobGraph 转化成名为 ExecutionGraph 的物理 Dataflow 图,该图包含了那些可以并行执行的任务。

JobManager 从 ResourceManager 申请执行任务的必要资源(TaskManager 处理槽)。一旦它收到了足够数量的 TaskManager 处理槽(slot),就会将 ExecutionGraph 中的任务分发给 TaskManager 来执行。在执行过程中,JobManager 还要负责所有需要集中协调的操作,如创建检查点。

ResourceManager

针对不同的环境和资源提供者(resource provider) (如 YARN、Mesos、Kubernetes 或独立部署),Flink 提供了不同的 ResourceManager。ResourceManager 负责管理 Flink 的处理资源单元-TaskManager 处理槽。当 JobManager 申请 TaskManager 处理槽时,ResourceManager 会指示一个拥有空闲处理槽的 TaskManager 将其处理槽提供给 JobManager。如果 ResourceManager 的处理槽数无法满足 JobManager 的请求,则 ResourceManager 可以和资源提供者通信,让它们提供额外容器来启动更多 TaskManager 进程。同时,ResourceManager 还负责终止空闲的 TaskManager 以释放计算资源。

TaskManager

TaskManager 是 F link 的工作进程 (worker process)。通常在 Flink 搭建过程中要启动多个 TaskManager。每个 TaskManager 提供一定数量的处理槽。处理槽的数目限制了一个 TaskManager 可执行的任务数。TaskManager 在启动后,会向 ResourceManager 注册它的处理槽。当接收到 ResourceManager 的指示时,TaskManager 会向 JobManager 提供一个或多个处理槽。之后, JobManager 就可以向处理槽中分配任务来执行。在执行期间,运行同一应用不同任务的 TaskManager 之间会产生数据交换。

Dispatcher

Dispatcher 会跨多个作业运行,它提供了一个 REST 接口来让我们提交需要执行的应用。一旦某个应用提交执行, Dispatcher 会启动一个 JobManager 并将应用转交给它。REST 接口意味着 Dispatcher 这一集群的 HTTP 入口可以受到防火墙的保护。Dispatcher 同时还会启动一个 Web UI,用来提供有关作业执行的信息。
image