本文为您介绍实时计算Flink版的操作指导方面的常见问题,包括控制台操作、网络连通性和JAB包等问题。
控制台操作
网络连通性
JAR包问题
如何在OSS控制台上传JAR包?
在Flink全托管控制台上查看当前集群的OSS Bucket。
OSS Bucket信息如下图所示。
登录OSS管理控制台,上传JAR包至目标Bucket的/artifacts/namespaces目录下。
在Flink全托管控制台左侧导航栏,单击资源上传,查看通过OSS控制台上传的JAR包。
如何开启GC日志?
在作业运维页面,单击目标作业名称后,单击返回开发后,在页面右侧高级配置面板的更多Flink配置中,添加代码后保存生效,代码示例如下。
env.java.opts:>--XX:+PrintGCDetails-XX:+PrintGCDateStamps-Xloggc:/flink/log/gc.log-XX:+UseGCLogFileRotation-XX:NumberOfGCLogFiles=2-XX:GCLogFileSize=50M

如何查找引发告警的作业?
告警事件中包含JobID和Deployment ID信息,但是由于作业Failover后导致JobID发生变化,因此您需要通过Deployment ID查找是哪个作业报错。目前,Flink全托管控制台上暂无Deployment ID信息,您需要在作业的URL中获取Deployment ID信息。
如何查看工作空间ID等信息?
在管理控制台目标工作空间名称右侧,选择
如何查看当前作业的Flink版本?
您可以通过以下方式查看:
在作业开发页面右侧,单击高级配置,选择
,即可查看。在作业运维页面,单击目标作业名称,在作业配置页签下,即可看到版本信息。
如何关闭系统自动开通的Prometheus监控服务?
该监控服务一旦被卸载,将无法再次被打开,VVP将不再显示数据曲线。如果作业出现异常现象,将无法定位初始异常时间,并且无法上报监控告警,请谨慎操作。
如果您不再需要对实时计算Flink版进行监控,您可以按照如下步骤卸载Prometheus监控服务:
在左侧导航栏单击监控列表,进入可观测监控Prometheus版的实例列表页面。
单击实例类型为Prometheus for Flink Serverless的实例对应操作列的卸载。
在弹出的对话框中,单击确认。
如何设置白名单?
通常,Flink全托管上下游存储设备默认拒绝外部设备的访问。因此,您需要在目标存储设备白名单中添加Flink全托管虚拟交换机的网段。操作步骤详情如下:
Flink全托管集群如何访问公网?
背景说明
Flink全托管集群默认不具备访问公网的能力,但阿里云提供的NAT网关可以实现VPC网络与公网网络互通,以满足部分Flink全托管集群用户通过UDX或Datastream代码访问公网的需求。
解决方案
如何访问跨VPC的其他服务?
您可以通过以下几种方式,访问跨VPC的其他服务:
提交工单,产品名称选择VPC,要求通过高速通道或其它产品建立网络连接,但是此种方式需要付费。
通过将网络实例连接至云企业网实现网络互通,详情请参见入门概述。
使用VPN网关建立VPC到VPC的VPN连接,详情请参见建立VPC到VPC的连接。
退掉和Flink全托管不同VPC的其他服务后,重新购买一个与Flink全托管相同VPC的其他服务。
释放Flink全托管服务后,重新购买一个和其他服务相同VPC的Flink全托管服务。
开通Flink全托管的公网访问能力,通过公网访问其他服务。Flink全托管集群默认不具备访问公网的能力,如有需求,详情请参见Flink全托管集群如何访问公网?。
说明因为在延迟性方面,公网不如内网,如果您对性能有要求,建议不要使用此方式。
如何解决Flink依赖冲突问题?
问题现象
有明显报错,且引发错误的为Flink或Hadoop相关类。
java.lang.AbstractMethodError java.lang.ClassNotFoundException java.lang.IllegalAccessError java.lang.IllegalAccessException java.lang.InstantiationError java.lang.InstantiationException java.lang.InvocationTargetException java.lang.NoClassDefFoundError java.lang.NoSuchFieldError java.lang.NoSuchFieldException java.lang.NoSuchMethodError java.lang.NoSuchMethodException
无明显报错,但会引起一些不符合预期的现象,例如:
日志不输出或log4j配置不生效。
该类问题通常是由于依赖中携带了log4j相关配置导致的。需要排查作业JAR包中是否引入了log4j配置的依赖,可以通过在dependency中配置exclusions的方式去掉log4j配置。
说明如果必须要使用不同版本的log4j,需要使用maven-shade-plugin将log4j相关的class relocation掉。
RPC调用异常。
Flink的Akka RPC调用出现依赖冲突可能导致的异常,默认不会显示在日志中,需要开启Debug日志进行确认。
例如,Debug日志中出现
Cannot allocate the requested resources. Trying to allocate ResourceProfile{xxx}
,但是JM日志在Registering TaskManager with ResourceID xxx
后,没有下文,直到资源请求超时报错NoResourceAvailableException
。此外TM持续报错Cannot allocate the requested resources. Trying to allocate ResourceProfile{xxx}
。原因:开启Debug日志后,发现RPC调用报错
InvocationTargetException
,该报错导致TM Slot分配到一半失败出现状态不一致,RM持续尝试分配Slot失败无法恢复。
问题原因
作业JAR包中包含了不必要的依赖(例如基本配置、Flink、Hadoop和log4j依赖),造成依赖冲突从而引发各种问题。
作业需要的Connector对应的依赖未被打入JAR包中。
排查方法
查看作业pom.xml文件,判断是否存在不必要的依赖。
通过
jar tf foo.jar
命令查看作业JAR包内容,判断是否存在引发依赖冲突的内容。通过
mvn dependency:tree
命令查看作业的依赖关系,判断是否存在冲突的依赖。
解决方案
基本配置建议将scope全部设置为provided,即不打入作业JAR包。
DataStream Java
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_2.11</artifactId> <version>${flink.version}</version> <scope>provided</scope> </dependency>
DataStream Scala
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-scala_2.11</artifactId> <version>${flink.version}</version> <scope>provided</scope> </dependency>
DataSet Java
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>${flink.version}</version> <scope>provided</scope> </dependency>
DataSet Scala
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-scala_2.11</artifactId> <version>${flink.version}</version> <scope>provided</scope> </dependency>
添加作业需要的Connector对应的依赖,并将scope全部设置为compile(默认的scope是compile),即打入作业JAR包中,以Kafka Connector为例,代码如下。
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-kafka_2.11</artifactId> <version>${flink.version}</version> </dependency>
其他Flink、Hadoop和log4j依赖不建议添加。但是:
如果作业本身存在基本配置或Connector相关的直接依赖,建议将scope设置为provided,示例如下。
<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <scope>provided</scope> </dependency>
如果作业存在基本配置或Connector相关的间接依赖,建议通过exclusion将依赖去掉,示例如下。
<dependency> <groupId>foo</groupId> <artifactId>bar</artifactId> <exclusions> <exclusion> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> </exclusion> </exclusions> </dependency>
如何解析Flink作业所依赖服务的域名?
如果您自建的Flink作业中所依赖的服务填写的是域名,则迁移上云至Flink全托管服务时,可能会报无法解析域名的问题。此时,您可以按照以下方案解析Flink作业所依赖服务的域名:
您已有自建的DNS,并且Flink VPC能够连通该自建DNS服务,且该自建DNS能够正常解析域名。
此时,您可以基于Flink全托管作业模板进行域名解析。假如您的自建DNS IP为192.168.0.1,操作步骤如下:
登录实时计算控制台。
在Flink全托管页签,单击目标工作空间操作列下的控制台。
在左侧导航栏,选择
。在Flink配置文本框,添加如下代码。
env.java.opts: >- -Dsun.net.spi.nameservice.provider.1=default -Dsun.net.spi.nameservice.provider.2=dns,sun -Dsun.net.spi.nameservice.nameservers=192.168.0.1
说明如果您的自建DNS有多个IP,建议IP之间使用英文逗号(,)分隔。
在Flink全托管控制台新建作业并运行。
如果还报UnknownHostException的错误,则意味着无法解析域名,请联系我们。
您没有自建的DNS或者Flink VPC无法与自建的DNS连通。
此时,您需要基于阿里云云解析PrivateZone进行域名解析。假如您的Flink VPC为vpc-flinkxxxxxxx,Flink作业需要访问的服务的域名分别为aaa.test.com 127.0.0.1、bbb.test.com 127.0.0.2和ccc.test.com 127.0.0.3,操作步骤如下:
开通云解析PrivateZone。详情请参见开通PrivateZone
添加Zone,以Flink作业需要访问服务的公共后缀作为Zone名称。详情请参见添加Zone。
关联Flink全托管的VPC。详情请参见关联/解关联VPC
添加解析记录至Zone。详情请参见添加PrivateZone解析记录。
在Flink全托管控制台新建作业并运行或者停止后再启动历史作业 。
如果还报unknowhost错误,则意味着无法解析域名,请联系我们。
当Flink和Kafka之间的网络是连通时,但是依然会有timeout expired while fetching topic metadata的报错的原因请参见为什么Flink和Kafka之间的网络是连通的,但是依然会有timeout expired while fetching topic metadata的报错?。