本文為您介紹實時計算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
,該配置并不會影響作業通過域名連接外部服務。配置方法請參見如何配置作業運行參數?。