狀態扭曲 - Managed Service for Apache Flink

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

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

狀態扭曲

對於有狀態運算子,即負責維護其業務邏輯 (如視窗) 狀態的運算子,資料扭曲總是會導致狀態扭曲。由於資料扭曲,某些子任務比其他子任務收到更多的事件,因此也在狀態中保留了更多資料。但是,即使對於具有均勻平衡分割區的應用程式,在狀態中保留多少資料也可能會出現扭曲。例如,對於工作階段視窗,某些使用者和工作階段分別都可能比其他使用者和工作階段長得多。如果較長的工作階段恰好是相同分割區的一部分,則可能導致相同運算子的不同子任務所保留的狀態大小不平衡。

狀態扭曲不僅增加了個別子任務所需的記憶體和磁碟資源,還會降低應用程式的整體效能。當應用程式取得檢查點或儲存點時,運算子狀態會保留在 Amazon S3 種,以保護狀態免受節點或叢集故障影響。在此處理程序期間 (特別是在 Managed Service for Apache Flink 上預設只啟用恰好一次的語義中),處理會從外部暫停,直到檢查點/儲存點執行完成為止。如果有資料扭曲,則完成操作的時間可能會受到已累積了特別大量的狀態之單一子任務所限制。在極端情況下,由於單個子任務無法持續保留狀態,擷取檢查點/儲存點可能會失敗。

因此,與資料扭曲類似,狀態扭曲也會大幅降低應用程式執行速度。

若要識別狀態扭曲,可以利用 Flink 儀表板。尋找最新的檢查點或儲存點,並在詳細資料中比較已針對個別子任務儲存的資料量。