
这张图展示了Flink程序的架构和运行流程。
主要组件及功能:
- Flink Program(Flink程序):
- 包含
Program code(程序代码),这是用户编写的业务逻辑代码。 - 经过
Optimizer / Graph Builder(优化器/图构建器)处理后,生成Dataflow graph(数据流图),它表示了程序中数据处理的流程和任务之间的关系。
- 包含
- Client(客户端):
- 包含
Actor System(Actor系统),用于与其他组件进行通信和交互。 - 客户端的主要功能是向
JobManager提交作业(Submit job (send dataflow)),以及取消或更新作业(Cancel / update job)。同时,它还接收来自TaskManager的状态更新(Status updates)和统计结果(Statistics & results)。
- 包含
- JobManager(作业管理器):
- 也包含
Actor System,用于与客户端和TaskManager进行通信。 - 它是整个系统的核心组件,负责协调和管理作业的执行。
Scheduler(调度器)负责将任务分配到不同的TaskManager上执行。Checkpoint Coordinator(检查点协调器)负责协调分布式快照(检查点)的创建,以保证数据处理的容错性和一致性。- 它还持有
Dataflow Graph,用于根据数据流图来调度和管理任务。
- 也包含
- TaskManager(任务管理器):
- 每个
TaskManager包含多个Task Slot(任务槽),任务槽是执行任务的基本单位,图中显示每个TaskManager有三个任务槽,其中部分任务槽中已经有Task(任务)在执行。 Memory & I/O Manager(内存和I/O管理器)负责管理任务的内存和输入输出操作。Network Manager(网络管理器)负责管理任务之间的数据传输,通过Data Streams(数据流)在不同的TaskManager之间传输数据。Actor System用于与JobManager和其他TaskManager进行通信,包括发送任务状态(Task Status)、心跳(Heartbeats)、统计信息(Statistics)等,同时接收来自JobManager的任务部署、停止、取消等指令(Deploy/Stop Cancel Tasks)以及触发检查点(Trigger Checkpoints)等操作。
- 每个
整体流程:
- 用户编写Flink程序代码,经过优化器和图构建器生成数据流图。
- 客户端将数据流图提交给JobManager。
- JobManager根据数据流图和资源情况,通过调度器将任务分配到不同的TaskManager的任务槽中执行。
- TaskManager执行任务,并通过网络管理器进行数据传输,同时通过Actor系统与JobManager和其他TaskManager进行通信,汇报任务状态、心跳、统计信息等,并接收管理指令。
- JobManager协调整个作业的执行,包括检查点的创建等,以确保作业的正确执行和容错性。
这种架构使得Flink能够高效地处理大规模数据流,具有良好的可扩展性和容错性,广泛应用于实时数据处理和流式计算等场景。