1、作业提交
Flink的Jar文件不是Flink集群的可执行文件,需要经过转换之后提交给集群:
- 在Flink Client中通过反射启动Jar中的main函数,生成Flink StreamGraph、JobGraph,将JobGraph提交给Flink集群;
- Flink集群收到JobGraph后,将JobGraph翻译成ExecutionGraph,然后开始调执行,启动成功后开始消费数据
Flink的核心执行流程,对用户的API的调用,可以转换成StreamGraph->JobGraph->ExecutionGraph->物理执行拓扑(Task DAG)
Graph中,节点表示数据的处理逻辑,边表示数据处理的流转。
1.1 提交流程
作业执行可以选择Session和Per-Job两种集群模式:
- Session模式的集群,一个集群中运行多个作业
- Per-Job模式的集群,一个集群只运行一个作业,作业执行完毕后则集群销毁
根据Client作业提交后是否可以退出,提交模式划分为Detached模式和Attached模式:
- Detached模式:Flink Client创建完集群后,可以退出命令行窗口,集群独立运行;
- Attached模式:Flink Client创建完集群后,不能关闭命令行窗口,需要与集群之间维持连接,好处是可以感知集群的退出,集群退出后有机会做一些资源清理等工作
1)Session模式
作业共享集群资源,作业通过HTTP协议进行提交。
启动逻辑:在启动脚本的时候就会检查是否存在已经启动好的Flink Session模式集群,如果没有,则启动一个Flink Session模式集群,然后再PiplineExecutor中,通过Dispatcher提供的Rest接口提交JobGraph,Dispatcher为每个作业启动一个JobMaster,进入作业执行阶段;
2)Per-Job模式
一个作业一个集群,作业之间相互隔离
启动逻辑:在PiplineExecutor中执行作业提交时,可以创建集群并将JobGraph以及所需的文件等一同提交给集群,集群在容器中启动Flink Master进程(JobManager),进行一系列初始化动作,初始化完毕后,从文件系统中获取JobGraph,交给Dispatcher,然后Dispatcher为作业启动一个JobMaster,进去作业执行阶段
