全部产品
Search
文档中心

实时计算Flink版:操作指导

更新时间:Sep 12, 2024

本文为您介绍实时计算Flink版的操作指导方面的常见问题,包括控制台操作、网络连通性和JAR包等问题。

如何在OSS控制台上传资源文件?

说明

您也可以直接在实时计算开发控制台文件管理页面上传资源文件,详情请参见文件管理

  1. 实时计算管理控制台上查看当前工作空间绑定的OSS Bucket信息。

    image.png

    OSS Bucket信息如下图所示。Bucket详情

  2. 登录OSS管理控制台,上传资源文件至目标Bucket的/artifacts/namespaces目录下。OSS

  3. 实时计算开发控制台左侧导航栏,单击文件管理,查看通过OSS控制台上传的资源文件。

    image.png

如何配置作业运行参数?

  1. 登录实时计算控制台

  2. 单击目标工作空间操作列下的控制台

  3. 运维中心 > 作业运维页面,单击目标作业名称。

  4. 部署详情页签,单击运行参数配置区域右侧编辑

  5. 其他配置项中,配置代码信息。代码示例如下。

    请确保键值对之间冒号后存在一个空格。

    task.cancellation.timeout: 180s
  6. 单击保存

如何开启GC日志?

运维中心 > 作业运维页面,单击目标作业名称后,在部署详情页签,单击运行参数配置区域右侧编辑,添加代码后保存生效,代码示例如下。

env.java.opts:>--XX: +PrintGCDetails-XX:+PrintGCDateStamps-Xloggc:/flink/log/gc.log-XX:+UseGCLogFileRotation-XX:NumberOfGCLogFiles=2-XX:GCLogFileSize=50M

image.png

如何查找引发告警的作业?

告警事件中包含JobID和Deployment ID信息,但是由于作业Failover后导致JobID发生变化,因此您需要通过Deployment ID查找是哪个作业报错。目前,实时计算开发控制台上暂无Deployment ID信息,您需要在作业的URL中获取Deployment ID信息。Depolyment ID

如何查看工作空间ID等信息?

在管理控制台目标工作空间名称右侧,选择更多 > 工作空间详情工作空间详情

如何查看AccessKey ID和AccessKey Secret信息?

重要

为降低AccessKey泄露的风险,自2023年7月5日起,只支持在新建的主账号或RAM用户时,显示AccessKey Secret信息,后续不可再进行查询,创建时请您妥善保管。

您可以通过阿里云管理控制台创建AccessKey并获取AccessKey ID和AccessKey Secret信息,步骤如下:

  1. 登录阿里云控制台

  2. 将鼠标悬停至页面右上角的头像,单击AccessKey管理accesskeys

  3. 单击创建AccessKey,复制或下载AccessKey ID和AccessKey Secret信息。

  4. 选中我已保存好 AccessKey Secret后,单击确定

说明

创建RAM用户的AccessKey操作详情请参见创建AccessKey

如何查看当前作业的Flink版本?

您可以通过以下方式查看:

  • 在作业开发页面右侧,单击更多配置,在引擎版本项中查看版本信息。

    image.png

  • 运维中心 > 作业运维页面,单击目标作业名称,在部署详情页签基础配置区域,查看版本信息。

    image.png

如何关闭系统自动开通的Prometheus监控服务?

重要

该监控服务一旦被卸载,将无法再次被打开,VVP将不再显示数据曲线。如果作业出现异常现象,将无法定位初始异常时间,并且无法上报监控告警,请谨慎操作。

如果您不再需要对实时计算Flink版进行监控,您可以按照如下步骤卸载Prometheus监控服务:

  1. 登录Prometheus控制台

  2. 在左侧导航栏单击实例列表,进入可观测监控Prometheus版的实例列表页面。

  3. 标签筛选下拉列表中,选择目标工作空间的ID或名称。

  4. 单击实例类型Prometheus for Flink Serverless的实例对应操作列的卸载

  5. 在弹出的对话框中,单击确认

如何设置白名单?

通常,实时计算Flink版上下游存储设备默认拒绝外部设备的访问。因此,您需要在目标存储设备白名单中添加实时计算Flink版虚拟交换机的网段。操作步骤详情如下:

  1. 登录实时计算控制台

  2. 在目标工作空间右侧操作列,选择更多 > 工作空间详情

  3. 工作空间详情对话框,查看实时计算Flink版虚拟交换机的网段信息。网段

  4. 在您的目标存储设备白名单中,添加实时计算Flink版虚拟交换机的网段

    例如,您要为云数据库RDS MySQL版数据库设置白名单,您可以参见设置IP白名单

    说明
    • 如果您后续新增了虚拟交换机,也需要将新增虚拟交换机的网段添加至目标存储设备的白名单中。

    • 如果您的虚拟交换机和上下游存储不在同一可用区,添加虚拟交换机网段至白名单后,网络可以连通。

登录实时计算控制台提示当前账号缺少权限

  • 问题详情

    登录实时计算控制台时提示:权限不足无法完成本次操作,需要操作描述符[stream:DescribeVvpInstances]和资源描述符[acs:stream:cn-beijing:1418886*********:vvpinstance/*],请联系主账号管理员。

    image.png

  • 问题原因

    当前登录身份缺少查看Flink工作空间的权限,或仅具有某个资源组的权限。

  • 解决方法

    • 如果您仅具有某个资源组权限,请在控制台上方选择对应资源组,并选择对应地域查看目标工作空间。

      image.png

    • 如果当前身份未被授权,参考RAM授权操作为对应RAM用户或角色添加具有查看Flink工作空间操作的权限策略。

      以下权限策略包含了查看Flink工作空间的权限,您选择添加以下任意一个即可。

      • 系统策略:AliyunStreamReadOnlyAccess(只读访问流计算服务)或AliyunStreamFullAccess(流计算服务所有权限),详情请参见系统权限策略

      • 自定义策略:stream:DescribeVvpInstances(查看工作空间),详情请参见自定义权限策略

实时计算Flink版如何访问公网?

  • 背景说明

    实时计算Flink版默认不具备访问公网的能力,但阿里云提供的NAT网关可以实现VPC网络与公网网络互通,以满足部分实时计算Flink版用户通过UDX或Datastream代码访问公网的需求。背景说明

  • 解决方案

    通过在VPC中创建NAT网关,并创建SNAT条目,将实时计算Flink版所在的交换机绑定至弹性公网IP(EIP),即可通过EIP访问公网。具体配置方法请参见:

    1. 创建NAT网关,详情请参见创建NAT网关

    2. 创建交换机粒度的SNAT条目并绑定弹性公网IP,详情请参见创建SNAT条目

如何访问跨VPC的其他服务?

您可以通过以下几种方式,访问跨VPC的其他服务:

  • 提交工单,产品名称选择VPC,要求通过高速通道或其他产品建立网络连接,但是此种方式需要付费。

  • 通过将网络实例连接至云企业网实现网络互通,详情请参见入门概述

  • 使用VPN网关建立VPC到VPC的VPN连接,详情请参见建立VPC到VPC的连接

  • 退掉和实时计算Flink版不同VPC的其他服务后,重新购买一个与实时计算Flink版相同VPC的其他服务。

  • 释放实时计算Flink版服务后,重新购买一个和其他服务相同VPC的实时计算Flink版。

  • 开通实时计算Flink版的公网访问能力,通过公网访问其他服务。实时计算Flink版默认不具备访问公网的能力,如有需求,详情请参见实时计算Flink版如何访问公网?

    说明

    因为在延迟性方面,公网不如内网,如果您对性能有要求,建议不要使用此方式。

如何在Flink开发页面进行网络探测?

Flink支持网络探测能力,您可以在Flink开发控制台进行网络探测,具体步骤如下:

  1. 登录实时计算控制台

  2. 单击目标工作空间操作列下的控制台。

  3. 单击页面上方的探测图标。

    Image 161.png

  4. 通过输入Endpoint或者IP地址的方式检测Flink作业运行的环境与您的上下游系统是否联通。

    重要

    输入Endpoint时,请删除后面的:<port>,并将<port>放到网络探测的Port栏输入。

    image.png

如何解决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,操作步骤如下:

    1. 登录实时计算控制台

    2. 单击目标工作空间操作列下的控制台

    3. 配置管理页面作业默认配置页签其他配文本框,添加如下代码。

      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之间使用英文逗号(,)分隔。

    4. 单击保存更改

    5. 实时计算开发控制台新建作业并运行。

      • 如果还报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,操作步骤如下:

    1. 开通云解析PrivateZone。详情请参见开通PrivateZone

    2. 添加Zone,以Flink作业需要访问服务的公共后缀作为Zone名称。详情请参见添加Zone

    3. 关联实时计算Flink版的VPC。详情请参见关联/解关联VPC

    4. 添加解析记录至Zone。详情请参见添加PrivateZone解析记录结果

    5. 实时计算开发控制台新建作业并运行或者停止后再启动历史作业 。

      如果还报unknowhost错误,则意味着无法解析域名,请联系我们。

报错:JobManager heartbeat timeout

  • 报错详情

    在配置了自建DNS域名解析后,出现作业频繁failover, 且报错信息为JobManager heartbeat timeout。

  • 报错原因

    可能是由于自建DNS的连接延迟大造成的。

  • 解决方案

    您需要在该作业中关闭对于TM的域名解析,即配置jobmanager.retrieve-taskmanager-hostname: false,该配置并不会影响作业通过域名连接外部服务。配置方法请参见如何配置作业运行参数?