

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 适用于 Apache Flink 2.2 的亚马逊托管服务
<a name="flink-2-2"></a>

适用于 Apache Flink 的亚马逊托管服务现在支持 Apache Flink 版本 2.2。这是该服务的首次主要版本升级。本页介绍了 Flink 2.2 中引入的功能，以及从 Flink 1.x 升级的重要注意事项。

**注意**  
Flink 2.2 引入了需要仔细规划的重大更改。请查看下方以及从 1.x 升级[Flink 2.2 升级的状态兼容性指南](state-compatibility.md)之前的重大更改和弃用完整列表。

## 适用于 Apache Flink 的亚马逊托管服务 2.2 的新增内容
<a name="flink-2-2-whats-new"></a>

适用于 Apache 的 Apache Flink 2.2 版的亚马逊托管服务引入了行为变化，这些变化可能会在升级后破坏现有应用程序。在下一节中，请仔细查看这些内容以及 Flink API 的更改。

**编程配置处理**
+ 现在，当客户尝试通过或类似方式修改 MSF 不支持的配置时，MSF Flink 2.2 会报告异常。`env.getConfig().set()` APIs请参阅[编程 Flink 配置属性](programmatic-configuration.md)。
+ 客户仍然可以通过支持票证请求更改某些配置（请参阅[可修改](https://docs.aws.amazon.com/managed-flink/latest/java/reference-modifiable-settings.html)的设置）

**指标移除**
+ 该`fullRestarts`指标已在 Flink 2.2 中删除。改用该`numRestarts`指标。
+ 在 Flink 连接器版本 6.0.0（仅与 Flink 2.2 兼容的 AWS 连接器版本）中，KDS 连接器的`bytesRequestedPerFetch`指标已被删除。
+ 在 Flink 2.2 中，`uptime`和`downtime`指标都被标记为已弃用，并将很快被删除。`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.getAvailabilityZone()`）的 AWS 开发工具包函数的应用程序在`EC2MetadataUtils.getInstanceType()`尝试`EC2MetadataUtils.getLocalHostName()`这些调用时将收到 HTTP 4xx 错误。
+ 如果您的应用程序使用 IMDS 来存储元数据或允许路径之外的其他信息，请重构您的代码以改用环境变量或应用程序配置。

**只读根文件系统**
+ 为了提高安全性，任何依赖项之外是默认`/tmp`的 flink 工作目录，都将导致:`java.io.FileNotFoundException: /{path}/{filename} (Read-only file system)`.
+ 文件系统依赖关系可以直接源自您的代码，也可以间接源于依赖项中包含的库。重写代码`/tmp/`中的直接文件系统依赖关系。对于来自库的间接文件系统依赖关系，请使用库配置覆盖将文件系统操作重定向到。`/tmp/`

## 重大更改和弃用
<a name="flink-2-2-breaking-changes"></a>

以下是 Apache Flink 2.2 托管服务中引入的重大更改和弃用内容的摘要。有关引入这些重大更改的 [Apache Flink 2.0](https://nightlies.apache.org/flink/flink-docs-stable/release-notes/flink-2.0/) 的完整发行说明，请参阅 Apache Flink 2.0 发行说明。

**DataSet API 已移除**
+ Flink 2.0\$1 版本中已完全删除了用于批处理的旧版 DataSet API。现在，所有批处理都必须使用统一的 DataStream API。
+ 在升级之前，必须将使用 DataSet API 的应用程序迁移到 DataStream API。要进行转换，请参阅 [Apache Flink 迁移指南 DataSet DataStream](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`接口已被新的统一 Source (FLIP-27) 和 Sink (FLIP-143) 所取代 APIs，它们为 bounded/unbounded 二元性提供了更好的支持、改进的检查点协调和更简洁的编程模型。
+ 对于 Kinesis Data Streams，`KinesisStreamsSource`请使用`KinesisStreamsSink`和来自。`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 序列化器可能会导致状态兼容性问题。
+ POJOs with 集合 (`HashMap``ArrayList`、、`HashSet`) 可能存在状态兼容性问题。
+ Avro 和 Protobuf 的序列化不受影响。
+ 有关[Flink 2.2 升级的状态兼容性指南](state-compatibility.md)对应用程序风险级别进行分类的详细评估，请参阅。

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

**运行时和语言支持**


****  

| 功能 | 说明 | 文档 | 
| --- | --- | --- | 
| Java 17 运行时 | Java 17 现在是默认运行时和推荐运行时；已移除 Java 11 支持。 | [Java 兼容性](https://nightlies.apache.org/flink/flink-docs-stable/zh/docs/deployment/java_compatibility/) | 
| Python 3.12 Support | 现在支持 Python 3.12；已移除 Python 3.8 支持。 | [PyFlink 文档](https://nightlies.apache.org/flink/flink-docs-release-2.2/docs/dev/python/overview/) | 

**状态管理和绩效**


****  

| 功能 | 说明 | 文档 | 
| --- | --- | --- | 
| RocksDB 8.10.0 | 通过 RocksDB 升级提高了 I/O 性能。 | [状态后端](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/ops/state/state_backends/) | 
| 序列化改进 | 地图、列表、套装的专用序列化器；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 功能**


****  

| 功能 | 说明 | 文档 | 
| --- | --- | --- | 
| 变体数据类型 | 原生支持半结构化数据 (JSON)，无需重复字符串解析。 | [数据类型](https://nightlies.apache.org/flink/flink-docs-release-2.1/docs/dev/table/types/) | 
| 达美加入 | 通过仅维护每个密钥的最新版本来降低流式联接的状态要求；需要客户管理的基础架构（例如 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 调用 streaming/batch 表上注册的 ML 模型。要求客户捆绑 ModelProvider 实施（例如flink-model-openai）。 ModelProvider Apache Flink 的托管服务不提供库。 | [机器学习预测](https://nightlies.apache.org/flink/flink-docs-release-2.1/docs/dev/table/sql/queries/model-inference/) | 
| 型号 DDL | 使用 CREATE MODEL 语句将机器学习模型定义为第一类目录对象。 | [创建语句](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 功能**


****  

| 功能 | 说明 | 文档 | 
| --- | --- | --- | 
| FLIP-27 来源 API | 新的统一源接口取代了传统接口 SourceFunction。 | [源](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/dev/datastream/sources/) | 
| FLIP-143 Sink API | 新的统一接收器接口取代了传统接口 SinkFunction。 | [水槽](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/dev/datastream/sinks/) | 
| 异步 Python DataStream | 在 Python DataStream API 中使用 AsyncFunction非阻塞 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 的版本。下表汇总了适用于 Apache Flink 的亚马逊托管服务中常用连接器的可用性：


**Flink 2.2 的连接器可用性**  

| Connector | 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-firehose`在某些中间版本中，Firehose 连接器从`flink-connector-aws-kinesis-firehose`变为）。
+ 请务必查看 A [pache Flink 连接器的亚马逊托管服务文档](https://docs.aws.amazon.com/managed-flink/latest/java/how-flink-connectors.html)，了解目标运行时支持的确切工件名称和版本。

## 不支持的功能和实验性功能
<a name="flink-2-2-unsupported"></a>

适用于 Apache Flink 2.2 的亚马逊托管服务不支持以下功能：
+ **物化表**：持续维护、可查询的表快照。
+ **自定义遥测更改**：自定义指标报告器和遥测配置。
+ **ForSt 状态后端**：分解状态存储（开源实验版）。
+ **Java 21**：开源中的实验性支持，Apache Flink 托管服务不支持。

## 已知问题
<a name="flink-2-2-known-issues"></a>

**Amazon Managed Service for Apache Flink Studio**

适用于 Apache Flink 的亚马逊托管服务中的 Flink 2.2 不支持 Studio 应用程序。有关更多信息，请参阅[创建 Studio 笔记本](https://docs.aws.amazon.com/managed-flink/latest/java/how-zeppelin-creating.html)。

**Kinesis 连接器 EFO**
+ 当 Kinesis `KinesisStreamsSource` 直播进行重新分片时，使用连接器 v5.0.0 和 v6.0.0 中引入的 with EFO（增强型扇出/ SubscribeToShard）路径的应用程序可能会失败。这是社区中的一个已知问题。有关更多信息，请参阅 [FLINK-37648](https://issues.apache.org/jira/browse/FLINK-37648)。
+ 如果 Flink 应用程序处于背压之下，则使用连接器 v5.0.0 和 v6.0.0 中引入的 with EFO（增强型扇出/ SubscribeToShard）路径的应用程序`KinesisStreamsSink`可能会遇到死锁，从而导致一个或多个应用程序的数据处理完全停止。`KinesisStreamsSource` TaskManagers恢复应用程序需要强制停止操作和启动应用程序操作。这是社区中已知问题的一个子案例。有关更多信息，请参阅 [FLINK-34071](https://issues.apache.org/jira/browse/FLINK-34071)。

## 升级体验
<a name="flink-2-2-upgrade"></a>

适用于 Apache 的 Amazon 托管服务 Flink 支持就地版本升级，从而保留您的应用程序配置、日志、指标、标签，以及您的应用程序状态（如果状态和二进制文件兼容）。有关 step-by-step说明，请参阅[升级到 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 文档的详细信息，请参阅 A [pache Fl](https://nightlies.apache.org/flink/flink-docs-release-2.2/) ink 2.2 文档。
+ 计划升级？ 请参阅 [升级到 Flink 2.2：完整指南](flink-2-2-upgrade-guide.md)。
+ 状态兼容性问题？ 请参阅 [Flink 2.2 升级的状态兼容性指南](state-compatibility.md)。

如有疑问或问题，请参阅[Managed Service for Apache Flink 的故障排除](troubleshooting.md)或联系 Supp AWS ort。