[Flink] Flink 版本特性的演進

千千寰宇發表於2024-10-24

Flink 1.15 新特性

Apache Flink 1.15 版本帶來了一系列新特性和改進,以下是一些主要的更新:

這些是 Flink 1.15 版本的一些主要新特性和改進,旨在提升使用者體驗、效能和雲原生環境下的互操作性。

流批一體的進一步完善

  • Flink 1.15 版本中流批一體更加完善,支援部分作業完成後的 Checkpoint 操作,以及在批模式下支援 Window table-valued 函式,使其在流批混合的場景下更加易用 。

改進運維體驗

包括:

  • 明確 Checkpoint 和 Savepoint 在不同作業之間的所屬權,簡化 Checkpoint 和 Savepoint 生命週期管理;
  • 更加無縫支援完整的自動伸縮;
  • 透過 Watermark 對齊來消除多個資料來源速率不同帶來的問題等 。
  • 包括能夠在不丟失狀態的情況下升級 SQL 作業;
  • 新增了對 JSON 相關函式的支援來簡化資料的輸入與輸出操作 。

與雲服務的互動操作性提升

  • 1.15 版本進一步提升了與雲服務的互動操作性,並且新增了更多的 Sink 聯結器與資料格式 。

響應式縮放和自適應排程器

  • 改進了 Reactive 模式的指標,併為自適應排程器新增了異常歷史記錄。自適應排程器可以根據資源情況在執行前決定資源的並行度 。

自適應批排程器

  • 引入了一個新的自適應批處理排程器,可以自動根據每個節點需要處理的資料量的大小自動決定批處理作業中各節點的並行度 。

跨源節點的 Watermark 對齊

  • 引入了 Watermark 對齊的能力,基於新的 Source 介面來實現的資料來源節點可以啟用 Watermark 對齊功能,使用者可以定義對齊組,如果其中某個源節點與其它節點相比 Watermark 領先過多,使用者可以暫停從該節點中消費資料 。

SQL 版本升級

  • 在 1.15 中,社群首先透過保持拓撲不變的方式使相同的查詢在升級 Flink 版本後仍然可以啟動和執行。
  • SQL 升級的核心是 JSON 計劃,可以讓 SQL 計劃以結構化資料的方式被匯入和匯出 。

基於 Changelog 的狀態儲存

  • 引入了 MVP 特性:基於 Changelog 的狀態儲存。這一新的狀態儲存旨在支援更短、更可以預測的 Checkpoint 間隔 。

可重複的清理

  • 在以前的 Flink 版本中,Flink 在作業結束時只嘗試清理一次與作業相關的殘留資料,這可能會導致在發生錯誤時無法完成清理。在這個版本中,Flink 將嘗試重複執行清理以避免殘留資料 。

CAST / 型別系統增強

  • 在 Flink 1.15 中,失敗的 CAST 的預設行為已從返回 null 更改為返回錯誤,從而使它更符合 SQL 標準 。

雲環境互操作性

  • 新增了寫入 Google Cloud Storage 的支援,並且整理了 Flink 生態中的聯結器並把精力放在支援 AWS 相關的生態上 。

Elasticsearch Sink

  • 基於最新的 Sink API 來實現的 Elasticsearch Sink,可以提供非同步輸出與端到端一致性的能力 。
  • 從 Flink 1.15 開始,Flink 已經不再支援使用 Scala 2.11 編譯,預設使用 2.12 來構建 。
  • 引入了一種 “執行緒” 模式的新執行模式,使用者自定義的函式將在 JVM 中作為執行緒執行,而不是在單獨的 Python 程序中執行,這可以顯著提高效能 。

Flink 1.14 新特性

Apache Flink 1.14 版本引入了多項新特性和改進,以下是一些主要的更新:

這些是 Flink 1.14 版本的一些主要新特性和改進。如果你計劃升級到 Flink 1.14 版本,建議仔細閱讀釋出說明,以瞭解可能需要考慮的配置、行為或依賴項的變化。

混合有界和無界流

  • Flink 1.14 支援在同一個應用中混合使用有界流和無界流。這意味著可以對部分執行、部分結束的應用進行 Checkpoint,例如一些運算元已經處理到了有界輸入資料流的末端。此外,當有界流到達末端時,會觸發最終 Checkpoint,以確保所有計算結果順利提交到 Sink。

批執行模式支援 DataStream API 和 SQL/Table API 的混合使用

  • 之前,批執行模式只支援單獨使用 DataStream API 或 SQL/Table API,而在 Flink 1.14 中,可以在同一應用中混合使用這兩種 API。

統一的 Source 和 Sink API 更新

  • Flink 開始圍繞統一的 API 整合聯結器生態,並新增了新的混合 Source,它可以在多個儲存系統間過渡,例如先從 Amazon S3 讀取資料,然後無縫切換到 Apache Kafka。

細粒度資源管理

  • 這是一項新的高階功能,用於提高大型共享叢集的資源利用率。透過 Slot Sharing Group,使用者可以影響子任務在 Slot 上的分佈,並且 TaskManager 上的 Slot 可以動態改變大小,以適應不同運算元的資源需求。

緩衝區去膨脹

  • 這是 Flink 中的一項新技術,可以最小化 Checkpoint 的延遲和開銷。它透過自動調整網路記憶體的用量,在確保高吞吐的同時最小化緩衝區中的資料量。

效能與效率的最佳化

  • Flink 1.14 版本在效能和效率方面進行了最佳化,包括大規模作業排程的最佳化和細粒度資源管理,以提高資源利用率。

Table / SQL / Python API 的改進

  • Flink 1.14 增強了對 SQL API 的支援,包括 Window Table-Valued Function 支援更多運算元與視窗型別,以及全新的程式碼生成器,解決了程式碼超長的問題。同時,Python API 也得到了改進,包括連結 Python 函式以提高效能,以及支援環回撥試模式。

告別舊版 SQL 引擎和 Mesos 支援

  • Flink 1.14 移除了舊版 SQL 引擎和對 Apache Mesos 的整合,以簡化程式碼庫並移除過時的介面。

Flink 1.13 新特性

Apache Flink,作為流處理領域的佼佼者,一直致力於提供高效、低延遲、高吞吐量的資料處理能力。隨著Flink 1.13的釋出,一系列新特性的引入,使得大資料處理變得更加簡單、自然和高效。本文將圍繞Flink 1.13的幾大核心新特性進行解析,並探討其在實際應用中的價值。

被動擴縮容:讓流處理應用管理更簡單

  • Flink 1.13引入的被動擴縮容功能,是本次更新的一大亮點。這一功能使得流處理作業的擴縮容變得像其他應用一樣簡單自然。使用者只需修改作業的並行度,Flink就能自動調整資源分配,無需手動干預。這一特性對於長時間執行的流處理應用尤為重要,因為它能夠顯著降低運維成本,提高資源利用率。

不需要知道它執行在 K8s、EKS、Yarn 等之上,也不需要嘗試獲取特定數量的工作節點;相反,它只是使用給定的工作節點數量。這種模式下,應用的並行度會根據工作節點的數量進行調整

  • 在實際應用中,被動擴縮容功能可以幫助企業根據業務需求動態調整資源,避免資源浪費或不足。

例如,在電商大促期間,流量激增,企業可以透過增加作業並行度來快速擴容,以滿足資料處理需求;而在流量低谷期,則可以透過減少並行度來釋放資源,降低成本。

SQL/Table API增強:提升資料處理能力

Flink 1.13在SQL/Table API方面也進行了多項增強,包括提高 DataStream API與Table API/SQL的互操作能力、最佳化SQL時間函式、增強Hive查詢語法相容性等。這些改進使得Flink在處理複雜資料查詢時更加靈活和高效。

  • DataStream API與Table API/SQL互操作能力:使用者可以在DataStream和Table API/SQL之間無縫切換,實現更加靈活的資料處理流程。
  • 最佳化SQL時間函式:支援更豐富的時間函式,如current_timestamp返回UTC+0時間,以及timestamp_ltz型別的時間戳,使得時間處理更加準確。
  • 增強Hive查詢語法相容性:支援更多Hive查詢語法,使得Flink能夠更好地與Hive整合,實現資料共享和查詢。

資源排程最佳化:提升作業執行效率

Flink 1.13在資源排程方面也進行了多項最佳化,包括新增被動資源管理模式與自適應排程模式、最佳化大規模作業排程以及批執行模式下網路Shuffle的效能等。這些最佳化使得Flink在處理大規模資料時更加高效和穩定。

  • 被動資源管理模式與自適應排程模式:結合雲原生的自動伸縮技術,Flink能夠更好地利用雲環境下的彈性計算資源,實現作業的靈活伸縮。
  • 最佳化大規模作業排程:透過改進作業排程演算法和策略,Flink能夠更有效地分配和管理資源,提高作業執行效率。
  • 批執行模式下網路Shuffle效能最佳化:針對批處理作業的特點,Flink最佳化了網路Shuffle的效能,減少了資料傳輸延遲和開銷。

效能分析工具:助力問題診斷與最佳化

Flink 1.13還引入了一系列效能分析工具,幫助使用者更好地理解和最佳化作業效能。這些工具包括用於識別瓶頸節點的負載和反壓視覺化、分析運算元熱點程式碼的CPU火焰圖以及分析State Backend狀態的State訪問效能指標等。

  • 負載和反壓視覺化:透過顏色和數值在UI上展示作業的繁忙程度和反壓情況,幫助使用者快速定位效能瓶頸。
  • CPU火焰圖:在Web UI中展示CPU火焰圖,幫助使用者分析哪些程式碼是效能熱點,從而進行針對性最佳化。
  • State訪問效能指標:提供State Backend狀態的訪問效能指標,幫助使用者瞭解狀態儲存的效能瓶頸,並進行相應的最佳化。

狀態後端的變更:現在可以在從儲存點恢復時更改 Flink 應用的狀態後端,這意味著應用程式的狀態不再鎖定在初始啟動時使用的狀態後端

  • 為了加速 Flink 機器學習工作的發展,相關的工作已經移動到新的 flink-ml 倉庫下

Flink 1.13 使 Python DataStream API 和 Table API 更接近 Java/Scala API 的功能,包括在 Python DataStream API 中新增了狀態操作和使用者自定義視窗的支援

Web UI 的改進: 可展示導致作業失敗的最後幾次異常

  • Flink Web UI 現在可以展示導致作業失敗的最後幾次異常,這有助於除錯導致後續失敗的根失敗原因

狀態後端和檢查點儲存的分離

  • 在 Flink 1.13 中,檢查點配置被提取到自己的介面 CheckpointStorage 中

對齊檢查點的支援重新調整作業並行度:在從對齊檢查點恢復時,現在可以更改作業的並行度

結語
Apache Flink 1.13的釋出,標誌著Flink在大資料處理領域又邁出了堅實的一步。透過引入被動擴縮容、SQL/Table API增強、資源排程最佳化以及效能分析工具等一系列新特性,Flink不僅提升了自身的資料處理能力,還降低了使用者的運維成本和學習門檻。相信在未來的大資料處理領域,Flink將繼續發揮重要作用,為企業創造更多價值。

X 參考文獻

相關文章