我的部署方式是flink on native k8s,使用application模式。其中,为了对接相关平台,我flink-conf.yaml中配置的jobmanager.rpc.address,没有用原生的servicename.namespace方式,而是使用了servicename直接指定。为此,我改造了flink-1.14.0\flink-kubernetes\src\main\java\org\apache\flink\kubernetes\kubeclient\decorators\InternalServiceDecorator.java类,把其中的getNamespacedInternalServiceName方法里的namespace直接干掉了。 但是这样做之后,出现了ERROR org.apache.flink.runtime.resourcemanager.active.ActiveResourceManager [] - Fatal error occurred in ResourceManager. org.apache.flink.runtime.resourcemanager.exceptions.ResourceManagerException: Could not start the ResourceManager akka.tcp://flink@flinksqldemo-rpc:6123/user/rpc/resourcemanager_1的报错,看起来这么搞,resourcemanager直接启动不了,进而导致pod里面的JM起不来了,该怎么办呢?
从错误信息看,出现了Could not start the ResourceManager
的异常,可能是因为ResourceManager无法连接到想要通信的Pod的IP地址和端口。这可能与您在flink-conf.yaml中使用了servicename直接指定的方式有关,因为没有使用namespace方式,所以可能会导致无法正确解析出需要通信的Pod的IP地址和端口。
为了解决这个问题,建议您恢复InternalServiceDecorator.java
类中getNamespacedInternalServiceName
方法里的namespace相关的逻辑,使其能够正确地获取作业管理器服务的地址。另外,可以尝试使用命名空间方式指定jobmanager.rpc.address来解决该问题,以保证ResourceManager能够正确地连接到作业管理器。
当时这个报错我排查出来是权限的问题,命名空间里面的角色不是 serviceAccount, 此回答整理自钉群“【③群】Apache Flink China社区”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。