本文為您介紹,如何配置Task快速重啟,從而降低Failover對作業的影響。
背景資訊
此功能為實驗性功能,請在生產環境下謹慎使用,如遇問題請及時提交工單和支援人員部門取得聯絡。
通常,當Flink流作業中的某個Task發生異常時,為了保證資料一致性,同一個PipelineRegion的所有Task都會進行Failover。作業Failover後,Source節點需要從上一個Checkpoint位點開始消費資料。然而,在一些作業中,Task Failover後還需要下載大資源檔或者State資料。如果作業並發很高,所有Task進行一輪Failover的調度時間可能也會比較長。這些都會導致作業出現延遲或阻塞,一段時間內無法正常消費資料等問題,恢複正常運行所需的時間會更長。
Task快速重啟配置可以有效緩解上述問題。配置Task快速重啟後,當某個Task發生異常時,可以只重啟失敗的Task。從而避免由於非Source Task異常導致的Source Task回退到上一個Checkpoint位點重新消費資料的情況,減少由於Task取消、重啟、追資料導致作業無法正常消費資料的時間長度。此外,還可以緩解高並發的情況下,所有Task進行一輪Failover的調度時間和初始化給叢集造成的壓力,從而降低Failover對作業的影響。
目前Task快速重啟支援兩種一致性語義:APPROXIMATE(不保證資料不丟失和重複)和AT_LEAST_ONCE(保證資料不丟失,不保證資料不重複)。其中APPROXIMATE語義無效能開銷,而AT_LEAST_ONCE語義存在效能開銷且需要額外使用Object Storage Service。
使用限制
不能在有限資料來源的流作業中使用。
無法與Unaligned Checkpoint共同使用。
無法在批作業中使用。
同一個Session叢集內無法同時運行未配置和配置了Task快速重啟的作業。
若作業中有運算元實現了prepareSnapshotPreBarrier方法,或在運行中會發送與Checkpoint相關的資訊,則不可使用AT_LEAST_ONCE語義。
注意事項
語義 | 注意事項 |
APPROXIMATE |
|
AT_LEAST_ONCE |
|
操作步驟
進入Task快速重啟配置入口。
單擊目標工作空間操作列下的控制台。
在 頁面,單擊目標作業名稱。
在部署詳情頁簽,單擊運行參數配置地區右側的編輯。
在其他配置中,增加如下代碼資訊。
若使用APPROXIMATE語義:
individual-task-failover.enabled: enabled_approximate shuffle-service-factory.class: org.apache.flink.runtime.io.network.IndividualRecoverableNettyShuffleServiceFactory
若使用AT_LEAST_ONCE語義:
individual-task-failover.enabled: enabled shuffle-service-factory.class: org.apache.flink.runtime.io.network.IndividualRecoverableNettyShuffleServiceFactory individual-task-failover.intermediate-checkpointing.interval: 適當的間隔,一般建議為cp周期的1/5到1/10,單位為ms。 classloader.check-leaked-classloader: false
如果您的作業使用的是Session模式的叢集,則也需要在Session叢集的配置中增加上述代碼。Session叢集配置詳情請參見步驟一:建立Session叢集。
單擊儲存。
在頁面頂部,單擊停止。
啟動作業,詳情請參見作業啟動。