Apache Flink 的工作流程主要包括以下几个步骤:
-
作业提交与初始化
- 用户通过 Flink 客户端(命令行或者 API)将编译好的 Flink 程序提交到 JobManager。
- 作业管理器接收到作业后,对其进行解析和优化,并生成执行计划。
-
资源分配
- 根据执行计划的需求,JobManager 向集群资源管理器(如 YARN、Mesos 或 Kubernetes)请求必要的 TaskManager 资源。
- 当资源就绪后,TaskManager 节点启动并连接到 JobManager。
-
任务分发与执行
- JobManager 将执行计划分解为多个独立的任务(Subtask),并将这些任务分配给各个可用的 TaskManager 上的 TaskSlot。
- 每个任务对应着程序中的一个或一组算子操作。
-
数据处理
- 数据从 Source 算子开始流入任务链,通过一系列 Transformation 算子进行处理。
- Flink 支持实时流式处理,采用流式的数据传输方式,尽可能减少数据在内存中的持久化存储。
- 对于涉及状态的操作,Flink 使用 Checkpoint 和 Savepoint 机制定期保存状态信息,以实现 Exactly-Once 语义和故障恢复。
-
结果输出
- 处理后的数据经过 Sink 算子写入目标系统,