本文为您介绍实时计算Flink版的操作指导方面的常见问题,包括控制台操作、网络连通性和JAR包等问题。
控制台操作
网络连通性
JAR包问题
如何在OSS控制台上传资源文件?
您也可以直接在实时计算开发控制台文件管理页面上传资源文件,详情请参见文件管理。
在实时计算管理控制台上查看当前工作空间绑定的OSS Bucket信息。
OSS Bucket信息如下图所示。
登录OSS管理控制台,上传资源文件至目标Bucket的/artifacts/namespaces目录下。
在实时计算开发控制台左侧导航栏,单击文件管理,查看通过OSS控制台上传的资源文件。
如何配置作业运行参数?
登录实时计算控制台。
单击目标工作空间操作列下的控制台。
在
页面,单击目标作业名称。在部署详情页签,单击运行参数配置区域右侧编辑。
在其他配置项中,配置代码信息。代码示例如下。
请确保键值对之间冒号后存在一个空格。
task.cancellation.timeout: 180s
单击保存。
如何开启GC日志?
在
页面,单击目标作业名称后,在部署详情页签,单击运行参数配置区域右侧编辑,添加代码后保存生效,代码示例如下。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查找是哪个作业报错。目前,实时计算开发控制台上暂无Deployment ID信息,您需要在作业的URL中获取Deployment ID信息。
如何查看工作空间ID等信息?
在管理控制台目标工作空间名称右侧,选择
。如何查看AccessKey ID和AccessKey Secret信息?
为降低AccessKey泄露的风险,自2023年7月5日起,只支持在新建的主账号或RAM用户时,显示AccessKey Secret信息,后续不可再进行查询,创建时请您妥善保管。
您可以通过阿里云管理控制台创建AccessKey并获取AccessKey ID和AccessKey Secret信息,步骤如下:
登录阿里云控制台。
将鼠标悬停至页面右上角的头像,单击AccessKey管理。
单击创建AccessKey,复制或下载AccessKey ID和AccessKey Secret信息。
选中我已保存好 AccessKey Secret后,单击确定。
创建RAM用户的AccessKey操作详情请参见创建AccessKey。
如何查看当前作业的Flink版本?
您可以通过以下方式查看:
在作业开发页面右侧,单击更多配置,在引擎版本项中查看版本信息。
在
页面,单击目标作业名称,在部署详情页签基础配置区域,查看版本信息。
如何关闭系统自动开通的Prometheus监控服务?
该监控服务一旦被卸载,将无法再次被打开,VVP将不再显示数据曲线。如果作业出现异常现象,将无法定位初始异常时间,并且无法上报监控告警,请谨慎操作。
如果您不再需要对实时计算Flink版进行监控,您可以按照如下步骤卸载Prometheus监控服务:
在左侧导航栏单击实例列表,进入可观测监控Prometheus版的实例列表页面。
在标签筛选下拉列表中,选择目标工作空间的ID或名称。
单击实例类型为Prometheus for Flink Serverless的实例对应操作列的卸载。
在弹出的对话框中,单击确认。
如何设置白名单?
通常,实时计算Flink版上下游存储设备默认拒绝外部设备的访问。因此,您需要在目标存储设备白名单中添加实时计算Flink版虚拟交换机的网段。操作步骤详情如下:
登录实时计算控制台提示当前账号缺少权限
问题详情
登录实时计算控制台时提示:权限不足无法完成本次操作,需要操作描述符[stream:DescribeVvpInstances]和资源描述符[acs:stream:cn-beijing:1418886*********:vvpinstance/*],请联系主账号管理员。
问题原因
当前登录身份缺少查看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支持网络探测能力,您可以在Flink开发控制台进行网络探测,具体步骤如下:
登录实时计算控制台。
单击目标工作空间操作列下的控制台。
单击页面上方的探测图标。
通过输入Endpoint或者IP地址的方式检测Flink作业运行的环境与您的上下游系统是否联通。
重要输入Endpoint时,请删除后面的
:<port>
,并将<port>放到网络探测的Port栏输入。
如何解决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,操作步骤如下:
登录实时计算控制台。
单击目标工作空间操作列下的控制台。
在配置管理页面作业默认配置页签其他配置文本框,添加如下代码。
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之间使用英文逗号(,)分隔。
单击保存更改。
在实时计算开发控制台新建作业并运行。
如果还报UnknownHostException的错误,则意味着无法解析域名,请联系我们。
在配置了自建DNS域名解析后,出现作业频繁failover, 且报错信息为JobManager heartbeat timeout。具体解决方案请参见报错:JobManager heartbeat timeout。
您没有自建的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解析记录。
在实时计算开发控制台新建作业并运行或者停止后再启动历史作业 。
如果还报unknowhost错误,则意味着无法解析域名,请联系我们。
与Kafka网络连通,但报错timeout时可参见为什么Flink和Kafka之间的网络是连通的,但是依然会有timeout expired while fetching topic metadata的报错?。
报错:JobManager heartbeat timeout
报错详情
在配置了自建DNS域名解析后,出现作业频繁failover, 且报错信息为JobManager heartbeat timeout。
报错原因
可能是由于自建DNS的连接延迟大造成的。
解决方案
您需要在该作业中关闭对于TM的域名解析,即配置
jobmanager.retrieve-taskmanager-hostname: false
,该配置并不会影响作业通过域名连接外部服务。配置方法请参见如何配置作业运行参数?。