每个 Flink 作业运行上的多个“k8s-ha-app1-jobmanager”配置映射

问题描述

我在 Kubernetes 之上有一个 Flink session 集群,最近我从基于 ZK 的 HA 切换到了 Kubernetes HA。

通读
https://cwiki.apache.org/confluence/display/FLINK/FLIP-144%3A+Native+Kubernetes+HA+for+Flink#FLIP144:NativeKubernetesHAforFlink-LeaderElection

我可以在 Flink 命名空间上观察每个资源的配置映射,如上述文档中所述:

k8s-ha-app1-00000000000000000000000000000000-jobmanager   2      4m35s  
k8s-ha-app1-dispatcher                                    2      4m38s  
k8s-ha-app1-resourcemanager                               2      4m38s  
k8s-ha-app1-restserver                                    2      4m38s

但是,我没有看到“jobmanager”资源的单个配置映射。我看到很多,因为工作全天运行。这可能是一个很大的数字,所以几天后,这意味着集群命名空间中配置映射的大量涌入

jobmanager 的不同 HA 配置映射似乎在

“地址”: "akka.tcp://flink@flink-jobmanager:6123/user/rpc/jobmanager_XXX"

(其中 XXX 增加
和“sessionId”值。

有人可以向我解释一下这些“jobmanager”资源是根据什么创建的? 一开始我认为可能会有计划的清理轮次,但我在文档中读到 HA 配置映射是从所有者那里剥离而不是删除的。 我是否错过了一些设置以便所有作业都针对同一个会话运行,或者我可以通过某种方式在作业运行后清理这些 k8s-ha-app1-XXXXXXXXXXXXXXXXXXXXX-jobmanager?

解决方法

Flink 内部的工作方式是 Dispatcher 为每个提交的作业创建一个专用的 JobMaster 组件。该组件需要领导选举,为此它创建了一个 k8s-ha-app1-<JOB_ID>-jobmanager 配置映射。这就是您看到正在创建多个 xyz-jobmanager ConfigMap 的原因。

之所以没有清理这些 ConfigMap,是因为目前只有在整个集群关闭时才会发生这种情况。这是一个限制,Flink 社区创建了 FLINK-20695 来修复它。这个想法是在作业达到终止状态后可以删除 JobMaster 相关的 ConfigMap。

有点相关的是另一个限制,它会在会话集群的情况下妨碍正确的清理。如果集群使用 SIGTERM 信号关闭,则目前不能保证所有资源都被清除。有关详细信息,请参阅 FLINK-21008