一、运行时的组件:

1.1、JobManager

1、作业管理器,控制每一个应用程序的主进程(也就是说每一个应用程序会被一个不同的JobMaager所控制执行),负责任务分配、调度、管理、checkpoint等;
2、会先接收到要执行的应用程序,包括作业图(JobGraph)、逻辑数据流图(logical dataflow graph)、和打包的所有类和其他资源库的jar包
3、JobManager会把JobGraph转换成一个物理层面的数据流图,这个图叫做执行图(ExecutionGraph),包含了所有可以并发执行的任务。
4、JobManager会向资源管理器请求执行任务必要的资源,也就是TaskManager上面的slot,一旦获取到足够的资源,就是将执行图分发到真正运行它们的TaskManager上,而在运行过程中JobManager会负责所有需要中央协调的操作,比如检查点checkpoint等。

1.2、TaskManager:任务管理器

1、Flink中的工作进程,通常在flink中有多个TaskManager运行,每一个TaskManager都包含了一定数量的插槽(slot),slot的数量限制了TaskManager能够执行的任务数量(最大并行度);
2、启动后,TaskManager会向资源管理器注册它的插槽,收到资源管理器的指令后,TaskManager就会将一个或者多个插槽提供给JobManager调用,JobManager就可以向插槽分配任务Task来执行了;
3、在执行过程中,一个TaskManager可以跟其他运行同一应用程序的TaskManager交换数据。

1.3、ResourceManager:资源管理器(内存、CPU),主要对内存进行划分为slot。

1、slot是Flink中定义的处理资源单元;
2、Flink为不同环境和资源管理工具提供了不同的资源管理器,比如Yarn、Mesos、K8s以及standalone等;
3、当JobManager申请插槽资源时,ResourceManager会将有空闲插槽的TaskManager分配给JobManager。如果RM没有足够的slot来满足JobManager的请求时,它还可以向资源提供平台发起会话,以提供启动TaskManager进程的容器。

1.4、Dispacher:分发器

1、可以跨作业运行,它为应用提交提供了REST接口;
2、当一个应用被提交执行时,分发器就会启动并将应用移交给一个JobManager;
3、会启动一个WEBUI,来方便展示和监控作业运行情况

二、作业提交流程:

2.1、Local本地模式

原理:
image.png
image.png
启动执行命令:

  1. 启动:./flink/bin/start-cluster.sh
  2. 可以看到进程:TaskManagerRunnerStandaloneSessionClusterEntrypoint
  3. 前端页面:http://ip:8081
  4. 提交作业命令:./flink/bin/flink run jar包路径 参数...
  5. 停止:./flink/bin/stop-cluster.sh
  6. 启动shell交互窗口:./flink/bin/start-scala-shell.sh local

2.2、集群模式:

原理:
image.pngimage.png
微信图片_20210121001315.png
启动执行命令:

  1. 启动:./flink/bin/start-cluster.sh
  2. 或者单独启动: ./flink/bin/jobmanager.sh ((start | start-foreground) cluster) | stop | stop-all
  3. ./flink/bin/taskmanager.sh start | start-foreground | stop | stop-all
  4. 启动历史服务器:./flink/bin/historyserver.sh (web默认端口8082)
  5. 前端页面:http://ip:8081
  6. 提交作业命令:./flink/bin/flink run jar包路径 参数...

2.3、集群模式-HA

原理:image.png
image.pngimage.png

2.4、yarn模式

微信图片_20210121001541.png