

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

# Amazon Managed Service for Apache Flink 2.2
<a name="flink-2-2"></a>

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

**注意**  
Flink 2.2 引入了需要仔細規劃的重大變更。從 1.x 升級[Flink 2.2 升級的狀態相容性指南](state-compatibility.md)之前，請先檢閱以下和 的重大變更和棄用的完整清單。

## Amazon Managed Service for Apache Flink 2.2 的新功能
<a name="flink-2-2-whats-new"></a>

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

**程式設計組態處理**
+ 當客戶嘗試透過 `env.getConfig().set()`或類似 APIs.2 現在會報告例外狀況。請參閱 [程式設計 Flink 組態屬性](programmatic-configuration.md)。
+ 客戶仍然可以透過支援票證請求變更特定組態 （請參閱[可修改的設定](https://docs.aws.amazon.com/managed-flink/latest/java/reference-modifiable-settings.html))

**指標移除**
+ 指標`fullRestarts`已在 Flink 2.2 中移除。請改用 `numRestarts` 指標。
+ 已在 Flink 連接器 `bytesRequestedPerFetch` 6.0.0 版中移除 KDS AWS 連接器的指標 （僅限與 Flink 2.2 相容的連接器版本）。
+ `uptime` 和 `downtime`指標在 Flink 2.2 中都標示為已棄用，很快就會移除。`uptime` 將 取代為新的指標 `runningTime`。`downtime` 以一或多個 `restartingTime`、 `cancellingTime`和 取代 `failingTime`。
+ 如需支援指標的完整清單，請參閱[指標和維度頁面](https://docs.aws.amazon.com/managed-flink/latest/java/metrics-dimensions.html)。

**封鎖的非憑證 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/`。

## 中斷變更和棄用
<a name="flink-2-2-breaking-changes"></a>

以下是 Managed Service for Apache Flink 2.2 中引進的重大變更和棄用摘要。如需介紹這些重大變更的 [Apache Flink 2.0 完整版本備註，請參閱 Apache Flink 2.0 版本備註](https://nightlies.apache.org/flink/flink-docs-stable/release-notes/flink-2.0/)。

**DataSet API 已移除**
+ 用於批次處理的舊版 DataSet API 已在 Flink 2.0\$1 中完全移除。所有批次處理現在必須使用統一的 DataStream API。
+ 使用 DataSet API 的應用程式必須先遷移至 DataStream API，才能升級。請參閱 [ DataSet 至 DataStream 轉換的 Apache Flink 遷移指南](https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/dev/datastream/dataset_migration/) 

**Java 11 和 Python 3.8 已移除**
+ Java 11 支援完全移除；Java 17 是預設和建議的執行時間。
+ Python 3.8 支援已移除；Python 3.12 現在為預設值。

**已移除舊版連接器類別**
+ 舊版 `SourceFunction`和 `SinkFunction` 界面已由新的統一來源 (FLIP-27) 和接收器 (FLIP-143) APIs 取代，可更好地支援受限/未受限的雙重性、改善檢查點協調，以及更簡潔的程式設計模型。
+ 對於 Kinesis Data Streams，請使用`KinesisStreamsSink`來自 的 `KinesisStreamsSource`和 `flink-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 版本](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/ops/upgrading/)。

**狀態相容性考量事項**
+ 從 2.24 版升級至 5.6 版的 Kryo 序列化程式可能會導致狀態相容性問題。
+ 具有集合 (`HashMap`、`ArrayList`、`HashSet`) POJOs 可能有狀態相容性問題。
+ Avro 和 Protobuf 序列化不受影響。
+ [Flink 2.2 升級的狀態相容性指南](state-compatibility.md) 如需分類應用程式風險層級的詳細評估，請參閱 。

## 支援 Apache Flink 2.2 功能
<a name="flink-2-2-supported-features"></a>

**執行期和語言支援**


****  

| 功能 | Description | 文件 | 
| --- | --- | --- | 
| Java 17 執行期 | Java 17 現在是預設和建議的執行時間；Java 11 支援已移除。 | [Java 相容性](https://nightlies.apache.org/flink/flink-docs-stable/zh/docs/deployment/java_compatibility/) | 
| Python 3.12 支援 | Python 3.12 現在支援；Python 3.8 支援已移除。 | [PyFlink 文件](https://nightlies.apache.org/flink/flink-docs-release-2.2/docs/dev/python/overview/) | 

**狀態管理和效能**


****  

| 功能 | Description | 文件 | 
| --- | --- | --- | 
| RocksDB 8.10.0 | 透過 RocksDB 升級改善 I/O 效能。 | [狀態後端](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/ops/state/state_backends/) | 
| 序列化改進 | Map、List、Set； Kryo 專用序列化程式從 2.24 升級到 5.6。 | [類型序列化](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/dev/datastream/fault-tolerance/serialization/types_serialization/) | 

**SQL 和資料表 API 功能**


****  

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

**DataStream API 功能**


****  

| 功能 | Description | 文件 | 
| --- | --- | --- | 
| FLIP-27 來源 API | 取代舊版 SourceFunction 的新統一來源界面。 | [來源](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/dev/datastream/sources/) | 
| FLIP-143 接收器 API | 取代舊版 SinkFunction 的新統一接收器界面。 | [接收器](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/dev/datastream/sinks/) | 
| 非同步 Python DataStream | 使用 AsyncFunction 在 Python DataStream API 中非封鎖 I/O 操作。 | [非同步 I/O](https://nightlies.apache.org/flink/flink-docs-release-2.2/docs/dev/python/datastream/operators/async_io/) | 

## 連接器可用性
<a name="flink-2-2-connectors"></a>

升級至 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\$1 版本 | 備註 | 
| --- | --- | --- | --- | 
| 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-firehose``flink-connector-aws-firehose`中，Firehose 連接器從 變更為 )。
+ 請務必檢查 [Amazon Managed Service for Apache Flink 連接器文件](https://docs.aws.amazon.com/managed-flink/latest/java/how-flink-connectors.html)，了解目標執行時間中支援的確切成品名稱和版本。

## 不支援和實驗性功能
<a name="flink-2-2-unsupported"></a>

Amazon Managed Service for Apache Flink 2.2 不支援下列功能：
+ **具體化資料表**：持續維護、可查詢的資料表快照。
+ **自訂遙測變更**：自訂指標報告程式和遙測組態。
+ **ForSt 狀態後端**：分解狀態儲存 （在開放原始碼中進行實驗）。
+ **Java 21**：開放原始碼中的實驗性支援，在 Managed Service for Apache Flink 中不支援。

## 已知問題
<a name="flink-2-2-known-issues"></a>

**Amazon Managed Service for Apache Flink Studio**

Amazon Managed Service for Apache Flink 中的 Flink 2.2 不支援 Studio 應用程式。如需詳細資訊，請參閱[建立 Studio 筆記本](https://docs.aws.amazon.com/managed-flink/latest/java/how-zeppelin-creating.html)。

**Kinesis 連接器 EFO**
+ 當 Kinesis 串流進行重新分片時，連接器 v5.0.0 和 v6.0.0 中引入`KinesisStreamsSource`搭配 EFO （增強廣發/SubscribeToShard) 路徑使用 的應用程式可能會失敗。這是社群中的已知問題。如需詳細資訊，請參閱 [FLINK-37648](https://issues.apache.org/jira/browse/FLINK-37648)。
+ 如果 Flink 應用程式處於背壓狀態，則連接器 v5.0.0 和 v6.0.0 中引入`KinesisStreamsSource`的搭配 EFO （增強廣發/SubscribeToShard) 路徑使用 的應用程式`KinesisStreamsSink`可能會遇到死結，導致一個或多個 TaskManagers 中的資料處理完全停止。需要強制停止操作和啟動應用程式操作才能復原應用程式。這是社群中已知問題的子案例。如需詳細資訊，請參閱 [FLINK-34071](https://issues.apache.org/jira/browse/FLINK-34071)。

## 升級體驗
<a name="flink-2-2-upgrade"></a>

Amazon Managed Service for Apache Flink 支援就地版本升級，保留您的應用程式組態、日誌、指標、標籤，以及如果狀態和二進位檔相容，則為您的應用程式狀態。如需逐步說明，請參閱 [升級到 Flink 2.2：完成指南](flink-2-2-upgrade-guide.md)。

如需在升級期間評估狀態相容性風險及處理不相容狀態的指引，請參閱 [Flink 2.2 升級的狀態相容性指南](state-compatibility.md)。

## 後續步驟
<a name="flink-2-2-next-steps"></a>
+ 第一次使用 Flink 2.2？ 如需詳細的 Apache Flink 2.2 文件，請參閱 [Apache Flink 2.2 文件。](https://nightlies.apache.org/flink/flink-docs-release-2.2/)
+ 規劃升級？ 請參閱 [升級到 Flink 2.2：完成指南](flink-2-2-upgrade-guide.md)
+ 狀態相容性問題？ 請參閱 [Flink 2.2 升級的狀態相容性指南](state-compatibility.md)

如有疑問或問題，請參閱 [Managed Service for Apache Flink 故障診斷](troubleshooting.md)或聯絡 AWS Support。