Flink Cluster 在 deploy 时有三种模式: Session Mode
, Per-Job Mode
和 Application Mode
.
Session 模式
Session-Mode, 故名思义, 会启动一个 Flink Cluster 并常驻运行, 并接收 Client 的 Job 提交.
如上图, 多个 Flink Applications 共享一个 JobManager, 并可以多次提交多个 Jobs.
因此优点是提交 Job 快, 每个 Job 提交时不要重复增加 Cluster 启动的时间和开销,
适合那些需要频繁提交的并且执行时间都不长的小型 Job, 比如使用 SQLClient 时,
会启动一个 Session-Mode 的 Flink Cluster, 这类偏即时交互类的场景 需要快速提交 SQL Job 并运行.
当然, 这样做的缺点也就是资源隔离不好, Jobs 之间会互相影响.
Application 模式
当需要较好的资源隔离和稳定性时, Session-Mode 就不适合了.
Application-Mode, 则会为每个 Flink Application 启动一个 Flink Cluster, 生命周期和 Application 绑定,
并会在 Application 结束后关闭 Cluster, 因此该模式适合长时间运行的大型 Application 和 Job.
和其他模式不同, Application-Mode
下 Flink Application 的 main() 方法不是运行在 Client 端的,
因此, 其他模式下的 Client 会有比较重的网络带宽和 CPU 开销.
Application-Mode 下, 用户的 jars 和依赖需要保证在 Flink 组件的 classpath 上 (比如JobManager, TaskManager).
Per-Job 模式
Per-Job-Mode, 从 Flink 1.15 开始已经被 deprecated
,
它只在 YARN 中支持, 会为每个提交的 Job 启动一个 Flink Cluster,
当 Job 结束后, Cluster 会被关闭和清理, 生命周期和 Job 绑定.
和 Application-Mode 的区别是 :
Per-Job-Mode
的 Application main() 运行在 Client 端.Application-Mode
允许 Application 提交多个 Jobs.
参考
https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/deployment/overview/
https://issues.apache.org/jira/browse/FLINK-26000