全部產品
Search
文件中心

Realtime Compute for Apache Flink:操作指導

更新時間:Jul 24, 2024

本文為您介紹Realtime ComputeFlink版的操作指導方面的常見問題,包括控制台操作、網路連通性和JAR包等問題。

如何在OSS控制台上傳資源檔?

說明

您也可以直接在Realtime Compute開發控制台資源管理頁面上傳資源檔,詳情請參見資源管理

  1. Realtime Compute管理主控台上查看當前工作空間綁定的OSS Bucket資訊。

    image.png

    OSS Bucket資訊如下圖所示。Bucket詳情

  2. 登入OSS管理主控台,上傳資源檔至目標Bucket的/artifacts/namespaces目錄下。OSS

  3. Realtime Compute開發控制台左側導覽列,單擊資源管理,查看通過OSS控制台上傳的資源檔。

    image.png

如何配置作業運行參數?

  1. 登入Realtime Compute控制台

  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尋找是哪個作業報錯。目前,Realtime Compute開發控制台上暫無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將不再顯示資料曲線。如果作業出現異常現象,將無法定位初始異常時間,並且無法上報監控警示,請謹慎操作。

如果您不再需要對Realtime ComputeFlink版進行監控,您可以按照如下步驟卸載Prometheus監控服務:

  1. 登入Prometheus控制台

  2. 在左側導覽列單擊執行個體列表,進入可觀測監控Prometheus版的執行個體列表頁面。

  3. 標籤篩選下拉式清單中,選擇目標工作空間的ID或名稱。

  4. 單擊執行個體類型Prometheus for Flink Serverless的執行個體對應操作列的卸載

  5. 在彈出的對話方塊中,單擊確認

如何設定白名單?

通常,Realtime ComputeFlink版上下遊存放裝置預設拒絕外部裝置的訪問。因此,您需要在目標存放裝置白名單中添加Realtime ComputeFlink版虛擬交換器的網段。操作步驟詳情如下:

  1. 登入Realtime Compute控制台

  2. 在目標工作空間右側操作列,選擇更多 > 工作空間詳情

  3. 工作空間詳情對話方塊,查看Realtime ComputeFlink版虛擬交換器的網段資訊。網段

  4. 在您的目標存放裝置白名單中,添加Realtime ComputeFlink版虛擬交換器的網段

    例如,您要為雲資料庫RDS MySQL版資料庫設定白名單,您可以參見設定IP白名單

    說明
    • 如果您後續新增了虛擬交換器,也需要將新增虛擬交換器的網段添加至目標存放裝置的白名單中。

    • 如果您的虛擬交換器和上下遊儲存不在同一可用性區域,添加虛擬交換器網段至白名單後,網路可以連通。

登入Realtime Compute控制台提示當前帳號缺少許可權

  • 問題詳情

    登入Realtime Compute控制台時提示:許可權不足無法完成本次操作,需要操作描述符[stream:DescribeVvpInstances]和資源描述符[acs:stream:cn-beijing:1418886*********:vvpinstance/*],請聯絡主帳號管理員。

    image.png

  • 問題原因

    當前登入身份缺少查看Flink工作空間的許可權,或僅具有某個資源群組的許可權。

  • 解決方案

    • 如果您僅具有某個資源群組許可權,請在控制台上方選擇對應資源群組,並選擇對應地區查看目標工作空間。

      image.png

    • 如果當前身份未被授權,參考RAM授權操作為對應RAM使用者或角色添加具有查看Flink工作空間操作的權限原則。

      以下權限原則包含了查看Flink工作空間的許可權,您選擇添加以下任意一個即可。

      • 系統策略:AliyunStreamReadOnlyAccess(唯讀訪問Realtime Compute服務)或AliyunStreamFullAccess(Realtime Compute服務所有許可權),詳情請參見系統權限原則

      • 自訂策略:stream:DescribeVvpInstances(查看工作空間),詳情請參見自訂權限原則

Realtime ComputeFlink版如何訪問公網?

  • 背景說明

    Realtime ComputeFlink版預設不具備訪問公網的能力,但阿里雲提供的NAT Gateway可以實現VPC網路與公網網路互連,以滿足部分Realtime ComputeFlink版使用者通過UDX或Datastream代碼訪問公網的需求。背景說明

  • 解決方案

    通過在VPC中建立NAT Gateway,並建立SNAT條目,將Realtime ComputeFlink版所在的交換器綁定至Elastic IP Address(EIP),即可通過EIP訪問公網。具體配置方法請參見:

    1. 建立NAT Gateway,詳情請參見建立NAT Gateway

    2. 建立交換器粒度的SNAT條目並綁定Elastic IP Address,詳情請參見建立SNAT條目

如何訪問跨VPC的其他服務?

您可以通過以下幾種方式,訪問跨VPC的其他服務:

  • 提交工單,產品名稱選擇VPC,要求通過Express Connect或其他產品建立網路連接,但是此種方式需要付費。

  • 通過將網路執行個體串連至雲企業網實現網路互連,詳情請參見入門概述

  • 使用VPN網關建立VPC到VPC的VPN串連,詳情請參見建立VPC到VPC的串連

  • 退掉和Realtime ComputeFlink版不同VPC的其他服務後,重新購買一個與Realtime ComputeFlink版相同VPC的其他服務。

  • 釋放Realtime ComputeFlink版服務後,重新購買一個和其他服務相同VPC的Realtime ComputeFlink版。

  • 開通Realtime ComputeFlink版的公網訪問能力,通過公網訪問其他服務。Realtime ComputeFlink版預設不具備訪問公網的能力,如有需求,詳情請參見Realtime ComputeFlink版如何訪問公網?

    說明

    因為在延遲性方面,公網不如內網,如果您對效能有要求,建議不要使用此方式。

如何在Flink開發頁面進行網路探測?

Flink支援網路探測能力,您可以在Flink開發控制台進行網路探測,具體步驟如下:

  1. 登入Realtime Compute控制台

  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作業中所依賴的服務填寫的是網域名稱,則遷移上雲至Realtime ComputeFlink版服務時,可能會報無法解析網域名稱的問題。此時,您可以按照以下方案解析Flink作業所依賴服務的網域名稱:

  • 您已有自建的DNS,並且Flink VPC能夠連通該自建DNS服務,且該自建DNS能夠正常解析網域名稱。

    此時,您可以基於Realtime ComputeFlink版工作範本進行網域名稱解析。假如您的自建DNS IP為192.168.0.1,操作步驟如下:

    1. 登入Realtime Compute控制台

    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. Realtime Compute開發控制台新增作業並運行。

      • 如果還報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. 關聯Realtime ComputeFlink版的VPC。詳情請參見關聯/解關聯VPC

    4. 添加解析記錄至Zone。詳情請參見添加PrivateZone解析記錄結果

    5. Realtime Compute開發控制台新增作業並運行或者停止後再啟動歷史作業 。

      如果還報unknowhost錯誤,則意味著無法解析網域名稱,請聯絡我們。

報錯:JobManager heartbeat timeout

  • 報錯詳情

    在配置了自建DNS網域名稱解析後,出現作業頻繁failover, 且報錯資訊為JobManager heartbeat timeout。

  • 報錯原因

    可能是由於自建DNS的串連延遲大造成的。

  • 解決方案

    您需要在該作業中關閉對於TM的網域名稱解析,即配置jobmanager.retrieve-taskmanager-hostname: false,該配置並不會影響作業通過網域名稱串連外部服務。配置方法請參見如何配置作業運行參數?