

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

# 应用程序升级的注意事项和已知问题
<a name="precautions"></a>

## 代理重新启动后 Kafka 提交检查点操作反复失败
<a name="apache-kafka-connector"></a>

Flink 版本 1.15 中的 Apache Kafka 连接器存在已知的开源 Apache Flink 问题，这是由于 Kafka Client 2.8.1 中的一个严重开源 Kafka Client 错误造成的。有关更多信息，请参阅 [Kafka Commit，了解代理重启后检查点反复失败](https://issues.apache.org/jira/browse/FLINK-28060)，异[常后 commitOffsetAsync 无法恢复与组协调器的连接](https://issues.apache.org/jira/browse/KAFKA-13840)。KafkaConsumer 

为避免此问题，我们建议您在 Amazon Managed Service for Apache Flink 中使用 Apache Flink 1.18 或更高版本。

## 状态兼容性的已知限制
<a name="state-precautions"></a>
+ 如果您使用的是 Table API，则 Apache Flink 不保证 Flink 版本之间的状态兼容性。有关更多信息，请参阅 Apache Flink 文档中的[有状态升级和演进](https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/concepts/overview/#stateful-upgrades-and-evolution)。
+ Flink 1.6 状态与 Flink 1.18 不兼容。如果您尝试从 1.6 升级到 1.18 及更高版本并使用状态，API 会拒绝您的请求。您可以升级到 1.8、1.11、1.13 和 1.15 版本并创建快照，然后升级到 1.18 及更高版本。有关更多信息，请参阅 Apache Flink 文档中的[升级应用程序和 Flink 版本](https://nightlies.apache.org/flink/flink-docs-master/docs/ops/upgrading/)。

## Flink Kinesis 连接器的已知问题
<a name="kinesis-connector-precautions"></a>
+ 如果您使用的是 Flink 1.11 或更早版本，并且使用`amazon-kinesis-connector-flink`连接器获得 Enhanced-fan-out (EFO) 支持，则必须采取额外的步骤才能对 Flink 1.13 或更高版本进行有状态升级。这是因为连接器的软件包名称发生更改。有关更多信息，请参阅 [amazon-kinesis-connector-flink](https://github.com/awslabs/amazon-kinesis-connector-flink)。

  Flink 1.11 及更早版本的 `amazon-kinesis-connector-flink` 连接器使用打包的 `software.amazon.kinesis`，而 Flink 1.13 及更高版本的 Kinesis 连接器则使用 `org.apache.flink.streaming.connectors.kinesis`。使用此工具来支持您的迁移：[amazon-kinesis-connector-flink-state-migrator](https://github.com/awslabs/amazon-kinesis-connector-flink-state-migrator)。
+ 如果您将 Flink 1.13 或更早版本与 `FlinkKinesisProducer` 结合使用并升级到 Flink 1.15 或更高版本，则为了进行有状态升级，您必须继续在 Flink 1.15 或更高版本中使用 `FlinkKinesisProducer`，而不是更新的 `KinesisStreamsSink`。但是，如果您的连接器上已经设置自定义 `uid`，则应该能够切换到 `KinesisStreamsSink`，因为 `FlinkKinesisProducer` 无法保持状态。Flink 会将其视为同一个操作员，原因是已设置自定义 `uid`。

## 以 Scala 编写的 Flink 应用程序
<a name="scala-precautions"></a>
+ 从 Flink 1.15 开始，Apache Flink 在运行时中不包含 Scala。升级到 Flink 1.15 或更高版本 JAR/zip 时，必须在代码中包含要使用的 Scala 版本和其他 Scala 依赖项。有关更多信息，请参阅 [Amazon Managed Service for Apache Flink for Apache Flink 1.15.2 发布版本](https://docs.aws.amazon.com/managed-flink/latest/java/flink-1-15-2.html)。
+ 如果您的应用程序使用 Scala，并且正在将其从 Flink 1.11 或更早版本（Scala 2.11）升级到 Flink 1.13（Scala 2.12），请确保您的代码使用 Scala 2.12。否则，Flink 1.13 应用程序可能无法在 Flink 1.13 运行时中找到 Scala 2.11 类。

## 降级 Flink 应用程序时应考虑的事项
<a name="downgrading-precautions"></a>
+ 可以降级 Flink 应用程序，但仅限于应用程序之前使用较早 Flink 版本运行的情况。要进行有状态升级，Managed Service for Apache Flink 将需要使用与之匹配或更早版本创建的快照进行降级
+ 如果您要将运行时从 Flink 1.13 或更高版本更新到 Flink 1.11 或更早版本，并且您的应用程序使用 HashMap 状态后端，则您的应用程序将持续失败。