Amazon Managed Service for Apache Flink 2.2 - Managed Service for Apache Flink

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

Amazon Managed Service for Apache Flink 2.2

Amazon Managed Service for Apache Flink 現在支援 Apache Flink 2.2 版。這是服務的第一個主要版本升級。此頁面涵蓋 Flink 2.2 中介紹的功能,以及從 Flink 1.x 升級的重要考量。

注意

Flink 2.2 引入了需要仔細規劃的重大變更。從 1.x 升級Flink 2.2 升級的狀態相容性指南之前,請先檢閱以下和 的重大變更和棄用的完整清單。

Amazon Managed Service for Apache Flink 2.2 引入可能在升級時破壞現有應用程式的行為變更。與下一節的 Flink API 變更一起仔細檢閱這些變更。

程式設計組態處理

指標移除

  • 指標fullRestarts已在 Flink 2.2 中移除。請改用 numRestarts 指標。

  • 已在 Flink 連接器 bytesRequestedPerFetch 6.0.0 版中移除 KDS AWS 連接器的指標 (僅限與 Flink 2.2 相容的連接器版本)。

  • uptimedowntime指標在 Flink 2.2 中都標示為已棄用,很快就會移除。uptime 將 取代為新的指標 runningTimedowntime 以一或多個 restartingTimecancellingTime和 取代 failingTime

  • 如需支援指標的完整清單,請參閱指標和維度頁面

封鎖的非憑證 IMDS 呼叫

  • 這些允許的端點由 AWS SDK 的 DefaultCredentialsProvider (/latest/meta-data/iam/security-credentials/) 和 DefaultAwsRegionProviderChain (/latest/dynamic/instance-identity/document) 使用,以自動設定應用程式的登入資料和區域。

  • 使用依賴非憑證 IMDS 呼叫 (例如 EC2MetadataUtils.getInstanceId()EC2MetadataUtils.getLocalHostName()EC2MetadataUtils.getInstanceType()EC2MetadataUtils.getAvailabilityZone()) 的 AWS 開發套件函數的應用程式,在嘗試這些呼叫時會收到 HTTP 4xx 錯誤。

  • 如果您的應用程式將 IMDS 用於執行個體中繼資料或允許路徑以外的其他資訊,請重構程式碼以改用環境變數或應用程式組態。

唯讀根檔案系統

  • 為了提高安全性,/tmp其中 以外的任何相依性都是預設 flink 工作目錄,將導致:java.io.FileNotFoundException: /{path}/{filename} (Read-only file system)

  • 檔案系統相依性可以直接來自您的程式碼,也可以間接來自您的相依性中包含的程式庫。覆寫程式碼/tmp/中 的直接檔案系統相依性。對於來自程式庫的間接檔案系統相依性,請使用程式庫組態覆寫將檔案系統操作重新導向至 /tmp/

以下是 Managed Service for Apache Flink 2.2 中引進的重大變更和棄用摘要。如需介紹這些重大變更的 Apache Flink 2.0 完整版本備註,請參閱 Apache Flink 2.0 版本備註

Flink API 和語言移除

DataSet API 已移除

Java 11 和 Python 3.8 已移除

  • Java 11 支援完全移除;Java 17 是預設和建議的執行時間。

  • Python 3.8 支援已移除;Python 3.12 現在為預設值。

已移除舊版連接器類別

  • 舊版 SourceFunctionSinkFunction 界面已由新的統一來源 (FLIP-27) 和接收器 (FLIP-143) APIs 取代,可更好地支援受限/未受限的雙重性、改善檢查點協調,以及更簡潔的程式設計模型。

  • 對於 Kinesis Data Streams,請使用KinesisStreamsSink來自 的 KinesisStreamsSourceflink-connector-aws-kinesis-streams:6.0.0-2.0

已移除 Scala API

  • Flink Scala API 已移除。Flink 的 Java API 現在是 JVM 型應用程式的單一支援 API。

  • 如果您的應用程式是以 Scala 撰寫,您仍然可以使用來自 Scala 程式碼的 Flink 的 Java API,主要變更是 Scala 特定的包裝函式和隱含轉換不再可用。如需更新 Scala 應用程式的詳細資訊,請參閱升級應用程式和 Flink 版本

狀態相容性考量事項

  • 從 2.24 版升級至 5.6 版的 Kryo 序列化程式可能會導致狀態相容性問題。

  • 具有集合 (HashMapArrayListHashSet) POJOs 可能有狀態相容性問題。

  • Avro 和 Protobuf 序列化不受影響。

  • Flink 2.2 升級的狀態相容性指南 如需分類應用程式風險層級的詳細評估,請參閱 。

執行期和語言支援

功能 Description 文件
Java 17 執行期 Java 17 現在是預設和建議的執行時間;Java 11 支援已移除。 Java 相容性
Python 3.12 支援 Python 3.12 現在支援;Python 3.8 支援已移除。 PyFlink 文件

狀態管理和效能

功能 Description 文件
RocksDB 8.10.0 透過 RocksDB 升級改善 I/O 效能。 狀態後端
序列化改進 Map、List、Set; Kryo 專用序列化程式從 2.24 升級到 5.6。 類型序列化

SQL 和資料表 API 功能

功能 Description 文件
VARIANT 資料類型 原生支援半結構化資料 (JSON),無需重複字串剖析。 資料類型
Delta 加入 僅維護每個金鑰的最新版本,以減少串流聯結的狀態需求; 需要客戶管理的基礎設施 (例如 Apache Fluss)。 聯結
StreamingMultiJoinOperator 以單一運算子執行多方聯結,消除中繼具體化。 FLIP-516
ProcessTableFunction (PTF) 使用每個金鑰狀態和計時器,在 SQL 中直接啟用具狀態的事件驅動邏輯。 使用者定義的函數
ML_PREDICT 函數 直接從 SQL 在串流/批次資料表上呼叫已註冊的 ML 模型。要求客戶綁定 ModelProvider 實作 (例如 flink-model-openai)。ModelProvider 程式庫並非由 Managed Service for Apache Flink 運送。 ML 預測
模型 DDL 使用 CREATE MODEL 陳述式將 ML 模型定義為一級目錄物件。 CREATE 陳述式
向量搜尋 Flink SQL API 支援搜尋向量資料庫。目前沒有可用的開放原始碼VectorSearchTableSource實作;客戶必須提供自己的實作。 Flink SQL

DataStream API 功能

功能 Description 文件
FLIP-27 來源 API 取代舊版 SourceFunction 的新統一來源界面。 來源
FLIP-143 接收器 API 取代舊版 SinkFunction 的新統一接收器界面。 接收器
非同步 Python DataStream 使用 AsyncFunction 在 Python DataStream API 中非封鎖 I/O 操作。 非同步 I/O

升級至 Flink 2.2 時,您也需要將連接器相依性更新為與 Flink 2.2 執行時間相容的版本。Flink 連接器獨立於 Flink 執行期發行,而且並非所有連接器都具有與 Flink 2.2 相容的版本。下表摘要說明 Amazon Managed Service for Apache Flink 中常用連接器的可用性:

Flink 2.2 的連接器可用性
連接器 Flink 1.20 版本 Flink 2.0+ 版本 備註
Apache Kafka flink-connector-kafka 3.4.0-1.20 flink-connector-kafka 4.0.0-2.0 建議用於 Flink 2.2
Kinesis Data Streams (來源) flink-connector-kinesis 5.0.0-1.20 flink-connector-aws-kinesis-streams 6.0.0-2.0 建議用於 Flink 2.2
Kinesis Data Streams (接收器) flink-connector-aws-kinesis-streams 5.1.0-1.20 flink-connector-aws-kinesis-streams 6.0.0-2.0 建議用於 Flink 2.2
Amazon Data Firehose flink-connector-aws-kinesis-firehose 5.1.0-1.20 flink-connector-aws-kinesis-firehose 6.0.0-2.0 與 Flink 2.0 相容
Amazon DynamoDB flink-connector-dynamodb 5.1.0-1.20 flink-connector-dynamodb 6.0.0-2.0 與 Flink 2.0 相容
Amazon SQS flink-connector-sqs 5.1.0-1.20 flink-connector-sqs 6.0.0-2.0 與 Flink 2.0 相容
FileSystem (S3、HDFS) 與 Flink 綁定 與 Flink 綁定 內建於 Flink 分佈中 — 一律可用
JDBC flink-connector-jdbc 3.3.0-1.20 尚未針對 2.x 發行 沒有可用的 Flink 2.x 相容版本
OpenSearch flink-connector-opensearch 1.2.0-1.19 尚未針對 2.x 發行 沒有可用的 Flink 2.x 相容版本
Elasticsearch 僅限舊版連接器 尚未針對 2.x 發行 考慮遷移至 OpenSearch 連接器
Amazon Managed Service for Prometheus flink-connector-prometheus 1.0.0-1.20 尚未針對 2.x 發行 沒有可用的 Flink 2.x 相容版本
  • 如果您的應用程式依賴的連接器尚未有 Flink 2.x 版本,您有兩個選項:等待連接器發行相容的版本,或評估您是否可以使用替代版本取代它 (例如,使用 JDBC 目錄或自訂接收器)。

  • 更新連接器版本時,請注意成品名稱變更 — 某些連接器在主要版本之間重新命名 (例如,在某些中繼版本flink-connector-aws-kinesis-firehoseflink-connector-aws-firehose中,Firehose 連接器從 變更為 )。

  • 請務必檢查 Amazon Managed Service for Apache Flink 連接器文件,了解目標執行時間中支援的確切成品名稱和版本。

Amazon Managed Service for Apache Flink 2.2 不支援下列功能:

  • 具體化資料表:持續維護、可查詢的資料表快照。

  • 自訂遙測變更:自訂指標報告程式和遙測組態。

  • ForSt 狀態後端:分解狀態儲存 (在開放原始碼中進行實驗)。

  • Java 21:開放原始碼中的實驗性支援,在 Managed Service for Apache Flink 中不支援。

Amazon Managed Service for Apache Flink Studio

Amazon Managed Service for Apache Flink 中的 Flink 2.2 不支援 Studio 應用程式。如需詳細資訊,請參閱建立 Studio 筆記本

Kinesis 連接器 EFO

  • 當 Kinesis 串流進行重新分片時,連接器 v5.0.0 和 v6.0.0 中引入KinesisStreamsSource搭配 EFO (增強廣發/SubscribeToShard) 路徑使用 的應用程式可能會失敗。這是社群中的已知問題。如需詳細資訊,請參閱 FLINK-37648

  • 如果 Flink 應用程式處於背壓狀態,則連接器 v5.0.0 和 v6.0.0 中引入KinesisStreamsSource的搭配 EFO (增強廣發/SubscribeToShard) 路徑使用 的應用程式KinesisStreamsSink可能會遇到死結,導致一個或多個 TaskManagers 中的資料處理完全停止。需要強制停止操作和啟動應用程式操作才能復原應用程式。這是社群中已知問題的子案例。如需詳細資訊,請參閱 FLINK-34071

Amazon Managed Service for Apache Flink 支援就地版本升級,保留您的應用程式組態、日誌、指標、標籤,以及如果狀態和二進位檔相容,則為您的應用程式狀態。如需逐步說明,請參閱 升級到 Flink 2.2:完成指南

如需在升級期間評估狀態相容性風險及處理不相容狀態的指引,請參閱 Flink 2.2 升級的狀態相容性指南

如有疑問或問題,請參閱 Managed Service for Apache Flink 故障診斷或聯絡 AWS Support。