本文為您介紹,如何配置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語義存在性能開銷且需要額外使用對象存儲OSS。
使用限制
不能在有限數據源的流作業中使用。
無法與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集群。
單擊保存。
在頁面頂部,單擊停止。
啟動作業,詳情請參見作業啟動。