本文為您介紹Realtime ComputeFlink版的操作指導方面的常見問題,包括控制台操作、網路連通性和JAR包等問題。
控制台操作
網路連通性
JAR包問題
如何在OSS控制台上傳資源檔?
您也可以直接在Realtime Compute開發控制台檔案管理頁面上傳資源檔,詳情請參見檔案管理。
在Realtime Compute管理主控台上查看當前工作空間綁定的OSS Bucket資訊。
OSS Bucket資訊如下圖所示。
登入OSS管理主控台,上傳資源檔至目標Bucket的/artifacts/namespaces目錄下。
在Realtime Compute開發控制台左側導覽列,單擊檔案管理,查看通過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尋找是哪個作業報錯。目前,Realtime Compute開發控制台上暫無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將不再顯示資料曲線。如果作業出現異常現象,將無法定位初始異常時間,並且無法上報監控警示,請謹慎操作。
如果您不再需要對Realtime ComputeFlink版進行監控,您可以按照如下步驟卸載Prometheus監控服務:
在左側導覽列單擊執行個體列表,進入可觀測監控Prometheus版的執行個體列表頁面。
在標籤篩選下拉式清單中,選擇目標工作空間的ID或名稱。
單擊執行個體類型為Prometheus for Flink Serverless的執行個體對應操作列的卸載。
在彈出的對話方塊中,單擊確認。
如何設定白名單?
通常,Realtime ComputeFlink版上下遊存放裝置預設拒絕外部裝置的訪問。因此,您需要在目標存放裝置白名單中添加Realtime ComputeFlink版虛擬交換器的網段。操作步驟詳情如下:
在目標工作空間右側操作列,選擇
。在工作空間詳情對話方塊,查看Realtime ComputeFlink版虛擬交換器的網段資訊。
在您的目標存放裝置白名單中,添加Realtime ComputeFlink版虛擬交換器的網段。
例如,您要為雲資料庫RDS MySQL版資料庫設定白名單,您可以參見設定IP白名單。
說明如果您後續新增了虛擬交換器,也需要將新增虛擬交換器的網段添加至目標存放裝置的白名單中。
如果您的虛擬交換器和上下遊儲存不在同一可用性區域,添加虛擬交換器網段至白名單後,網路可以連通。
登入Realtime Compute控制台提示當前帳號缺少許可權
問題詳情
登入Realtime Compute控制台時提示:許可權不足無法完成本次操作,需要操作描述符[stream:DescribeVvpInstances]和資源描述符[acs:stream:cn-beijing:1418886*********:vvpinstance/*],請聯絡主帳號管理員。
問題原因
當前登入身份缺少查看Flink工作空間的許可權,或僅具有某個資源群組的許可權。
解決方案
如果您僅具有某個資源群組許可權,請在控制台上方選擇對應資源群組,並選擇對應地區查看目標工作空間。
如果當前身份未被授權,參考RAM授權操作為對應RAM使用者或角色添加具有查看Flink工作空間操作的權限原則。
以下權限原則包含了查看Flink工作空間的許可權,您選擇添加以下任意一個即可。
Realtime ComputeFlink版如何訪問公網?
背景說明
Realtime ComputeFlink版預設不具備訪問公網的能力,但阿里雲提供的NAT Gateway可以實現VPC網路與公網網路互連,以滿足部分Realtime ComputeFlink版使用者通過UDX或Datastream代碼訪問公網的需求。
解決方案
通過在VPC中建立NAT Gateway,並建立SNAT條目,將Realtime ComputeFlink版所在的交換器綁定至Elastic IP Address(EIP),即可通過EIP訪問公網。具體配置方法請參見:
建立NAT Gateway,詳情請參見建立NAT Gateway。
建立交換器粒度的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開發控制台進行網路探測,具體步驟如下:
單擊目標工作空間操作列下的控制台。
單擊頁面上方的探測表徵圖。
通過輸入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作業中所依賴的服務填寫的是網域名稱,則遷移上雲至Realtime ComputeFlink版服務時,可能會報無法解析網域名稱的問題。此時,您可以按照以下方案解析Flink作業所依賴服務的網域名稱:
您已有自建的DNS,並且Flink VPC能夠連通該自建DNS服務,且該自建DNS能夠正常解析網域名稱。
此時,您可以基於Realtime ComputeFlink版工作範本進行網域名稱解析。假如您的自建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之間使用英文逗號(,)分隔。
單擊儲存更改。
在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,操作步驟如下:
開通雲解析PrivateZone。詳情請參見開通PrivateZone
添加Zone,以Flink作業需要訪問服務的公用尾碼作為Zone名稱。詳情請參見添加Zone。
關聯Realtime ComputeFlink版的VPC。詳情請參見關聯/解關聯VPC
添加解析記錄至Zone。詳情請參見添加PrivateZone解析記錄。
在Realtime Compute開發控制台新增作業並運行或者停止後再啟動歷史作業 。
如果還報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
,該配置並不會影響作業通過網域名稱串連外部服務。配置方法請參見如何配置作業運行參數?。