这是我参与「第四届青训营 」笔记创作活动的第5天。
概述
Flink是由Apache开发的开源分布式流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。Flink可以执行批处理和流处理程序,Flink 将批处理(即处理有限的静态数据)视作一种特殊的流处理。 Flink 整个系统主要由两个组件组成,分别为 JobManager 和 TaskManager,Flink 架构也遵循 Master - Slave 架构设计原则,JobManager 为 Master 节点,TaskManager 为 Worker (Slave)节点。
Flink集群分析
Flink 运行时由两种类型的进程组成:至少一个 JobManager 和一个或者多个 TaskManager。 在高可用(HA)模式中,可能有多个 JobManager,其中一个始终是 leader,其他的则是 standby。 Flink集群启动方式:
- 直接在机器上作为standalone 集群启动
- 在容器中启动
- 通过YARN或Kubernetes等资源框架管理并启动
Client不是运行时和程序执行的一部分,而是用于准备数据流并将其发送给 JobManager。之后,客户端可以断开连接(分离模式),或保持连接来接收进程报告(附加模式)。客户端可以作为触发执行 Java/Scala 程序的一部分运行,也可以在命令行进程
./bin/flink run ...中运行。
JobManager
协调 Flink 应用程序的分布式执行。它决定何时调度下一个 task(或一组 task)、对完成的 task 或执行失败做出反应、协调 checkpoint、并且协调从失败中恢复等等。
这个进程由三个不同的组件组成:
- ResourceManager: 负责 Flink 集群中的资源提供、回收、分配 。 它管理 task slots,这是 Flink 集群中资源调度的单位。Flink 为不同的环境和资源提供者(例 YARN、Kubernetes 和 standalone 部署)实现了对应的 ResourceManager。
- Dispatcher:提供了一个 REST 接口,用来提交 Flink 应用程序执行,并为每个提交的作业启动一个新的 JobMaster。它还运行 Flink WebUI 用来提供作业执行信息。
- JobMaster:负责管理单个JobGraph的执行。Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster。
总结
乘风破浪,卓越不凡