无界状态增长 - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink 之前稱為 Amazon Kinesis Data Analytics for Apache Flink。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

无界状态增长

如果應用程式未正確處置過期的狀態資訊,這些資訊會持續累積並導致應用程式效能或穩定性問題。本節說明此狀況的徵狀和疑難排解步驟。

徵狀

這種情況可能有下列徵狀:

  • lastCheckpointDuration 指標正在逐漸增加或急劇增加。

  • lastCheckpointSize 指標正在逐漸增加或急劇增加。

原因和解決方案

下列情況可能會導致應用程式累積狀態資料:

  • 應用程式保留狀態資料的時間超過需要的時間。

  • 應用程式使用持續時間過長的視窗查詢。

  • 您尚未為狀態資料設定 TTL。如需詳細資訊,請參閱 Apache Flink 文件中的狀態存留時間 (TTL)

  • 您正在執行的應用程式相依於 Apache Beam 2.25.0 版或更高版本。您可以通過擴展關鍵實驗和值來選擇退出讀取轉換的新版本use_deprecated_read。 BeamApplicationProperties如需詳細資訊,請參閱 Apache Beam 文件

應用程式有時會面臨持續擴增的狀態大小增長,從長遠來看,這是不可持續的 (畢竟 Flink 應用程式會無限期地執行)。有時,這可以追溯至存儲狀態資料且未正確地老化舊資訊的應用程式。但是有時候,使用者對 Flink 可以提供的東西抱有根本不合理的期望。應用程式可以在跨越數天甚至數週的長時段內使用彙總。除AggregateFunctions非使用允許增量聚合,否則 Flink 需要將整個窗口的事件保持在狀態。

此外,當使用進程函數來實作自訂運算子時,應用程式需要從業務邏輯不再需要的狀態中移除資料。在這種情況下,state time-to-live 可用於根據處理時間自動將資料逾時。Managed Service for Apache Flink 正在使用增量檢查點,因此狀態 TTL 基於 RocksDB 壓縮。在壓縮操作發生之後,您只能觀察到狀態大小的實際縮減 (由檢查點大小表示)。特別是對於低於 200 MB 的檢查點大小,由於狀態到期,您不太可能觀察到任何檢查點大小縮小。儲存點則基於不包含舊資料之狀態的全新副本,因此您可以在 Managed Service for Apache Flink 中觸發快照,以強制移除過期狀態。

出於偵錯目的,停用增量檢查點以更快速地驗證檢查點大小是否確實減小或穩定 (並避免 RocksBS 壓縮的影響) 是可行的。但是,這需要提交票證給服務團隊。