主从架构
图中客户端Client不是Flink运行时框架的一部分,而是用来准备和提交数据流作业的。
由图可知,当flink代码编译后,一般会经过优化处理,当flink程序通过客户端提交任务Job到JobManager主节点后,JobManager会用任务调度器进行调度,并分配到从节点TaskManager上执行。
Client、JobManager、TaskManager间通过Actor System实现通信,Actor是一种并发模型,其中基于Actor模型系统中的线程(或进程)通过消息传递的方式进行通信,而这些线程(或进程)称为Actor。
Client可以提交Job也可以根据情况取消、更新job,JobManager节点将状态信息(Status updates)、统计和结果信息发送给Client端,从而让客户端知道当前任务执行的情况。
Client、JobManager、TaskManager都是独立的JVM进程。
任务和算子链
一个Task一般由多个Sub-Task构成。每个子任务由一个线程执行。算子链可以对计算进行优化:
- 减少线程间切换开销,提高计算速度
- 减少延迟和提高吞吐量
图中虚线框代表一个Task,其中可能只有一个