

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

# Amazon MSK 版本支持
<a name="version-support"></a>

此主题介绍 [Amazon MSK 版本支持策略](#version-support-policy) 和 [升级 Apache Kafka 版本](version-upgrades.md) 的过程。如果要升级 Kafka 版本，请遵循[版本升级的最佳实践](version-upgrades-best-practices.md)中概述的最佳实践。

**Topics**
+ [Amazon MSK 版本支持策略](#version-support-policy)
+ [升级 Apache Kafka 版本](version-upgrades.md)
+ [版本升级的最佳实践](version-upgrades-best-practices.md)

## Amazon MSK 版本支持策略
<a name="version-support-policy"></a>

本节介绍了 Amazon MSK 支持的 Kafka 版本的支持策略。
+ 所有 Kafka 版本均受支持，直至达到其终止支持日期。有关终止支持日期的详细信息，请参阅[支持的 Apache Kafka 版本](supported-kafka-versions.md)。在终止支持日期之前，将您的 MSK 集群升级到推荐的 Kafka 版本或更高版本。有关升级 Apache Kafka 版本的详细信息，请参阅[升级 Apache Kafka 版本](version-upgrades.md)。在终止支持日期之后使用 Kafka 版本的集群会自动升级到推荐的 Kafka 版本。自动升级可以在支持结束日期后的任何时间进行。在升级之前，您不会收到任何通知。
+ MSK 将逐步停止对使用已发布终止支持日期的 Kafka 版本的新创建集群的支持。

# 升级 Apache Kafka 版本
<a name="version-upgrades"></a>

您可以将现有的 MSK 集群升级为较新版本的 Apache Kafka。在升级集群的 Kafka 版本之前，请确认客户端软件版本支持新 Kafka 版本中的功能。

有关如何在升级期间使集群高度可用的信息，请参阅[构建高度可用的集群](bestpractices.md#ensure-high-availability)。

**使用 Apache Kafka 版本升级 AWS 管理控制台**

1. 在 [https://console.aws.amazon.com/msk/](https://console.aws.amazon.com/msk/) 打开 Amazon MSK 控制台。

1. 在导航栏上，选择您在其中创建 MSK 集群的区域。

1. 选择要升级的 MSK 集群。

1. 在**属性**选项卡上，在 **Apache Kafka 版本**部分中选择**升级**。

1. 在 **Apache Kafka 版本**部分，执行以下操作：

   1. 在*选择 Apache Kafka 版本*下拉列表中，选择要升级至的目标版本。例如，选择 **3.9.x**。

   1. （可选）选择**查看版本兼容性**，验证集群的当前版本与可用升级版本之间是否兼容。然后，选择**选择**以继续。
**注意**  
Amazon MSK 支持大多数 Apache Kafka 版本进行就地升级。但是，从 ZooKeeper基于 Kafka 的版本升级到 KRaft基于 Kafka 的版本时，必须创建一个新集群。然后，将数据复制到新的集群，并将客户端切换至新集群。

   1. （可选）选中**更新集群配置**复选框，应用与新版本兼容的配置更新。这就启用了新版本的功能和改进。

      如果需要保持现有的自定义配置，可跳过这一步。
**注意**  
服务器端升级不会自动更新客户端的应用程序。
为保持集群稳定性，不支持版本降级。

   1. 选择**升级**以开始升级过程。

**使用 Apache Kafka 版本升级 AWS CLI**

1. 运行以下命令，并将 *ClusterArn* 替换为创建集群时所获取的 Amazon 资源名称（ARN）。如果您没有该集群的 ARN，可以通过列出所有集群来找到它。有关更多信息，请参阅 [列出 Amazon MSK 集群](msk-list-clusters.md)。

   ```
   aws kafka get-compatible-kafka-versions --cluster-arn ClusterArn
   ```

   此命令的输出包括您可以将集群升级到的 Apache Kafka 版本的列表。其内容类似于以下示例。

   ```
   {
       "CompatibleKafkaVersions": [
           {
               "SourceVersion": "2.2.1",
               "TargetVersions": [
                   "2.3.1",
                   "2.4.1",
                   "2.4.1.1",
                   "2.5.1"
               ]
           }
       ]
   }
   ```

1. 运行以下命令，并将 *ClusterArn* 替换为创建集群时所获取的 Amazon 资源名称（ARN）。如果您没有该集群的 ARN，可以通过列出所有集群来找到它。有关更多信息，请参阅 [列出 Amazon MSK 集群](msk-list-clusters.md)。

   将 *Current-Cluster-Version* 替换为集群的当前版本。因为*TargetVersion*你可以从上一个命令的输出中指定任何目标版本。
**重要**  
集群版本不是简单的整数。要查找集群的当前版本，请使用[DescribeCluster](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn.html#DescribeCluster)操作或 desc [ribe-](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kafka/describe-cluster.html) AWS CLI cluster 命令。示例版本是 `KTVPDKIKX0DER`。

   ```
   aws kafka update-cluster-kafka-version --cluster-arn ClusterArn --current-version Current-Cluster-Version --target-kafka-version TargetVersion
   ```

   上一个命令的输出如以下 JSON 所示。

   ```
   {
       
       "ClusterArn": "arn:aws:kafka:us-east-1:012345678012:cluster/exampleClusterName/abcdefab-1234-abcd-5678-cdef0123ab01-2",
       "ClusterOperationArn": "arn:aws:kafka:us-east-1:012345678012:cluster-operation/exampleClusterName/abcdefab-1234-abcd-5678-cdef0123ab01-2/0123abcd-abcd-4f7f-1234-9876543210ef"
   }
   ```

1. 要获得`update-cluster-kafka-version`操作结果，请运行以下命令，*ClusterOperationArn*替换为在命令输出中获得的 ARN。`update-cluster-kafka-version`

   ```
   aws kafka describe-cluster-operation --cluster-operation-arn ClusterOperationArn
   ```

   该 `describe-cluster-operation` 命令的输出如以下 JSON 示例所示。

   ```
   {
       "ClusterOperationInfo": {
           "ClientRequestId": "62cd41d2-1206-4ebf-85a8-dbb2ba0fe259",
           "ClusterArn": "arn:aws:kafka:us-east-1:012345678012:cluster/exampleClusterName/abcdefab-1234-abcd-5678-cdef0123ab01-2",
           "CreationTime": "2021-03-11T20:34:59.648000+00:00",
           "OperationArn": "arn:aws:kafka:us-east-1:012345678012:cluster-operation/exampleClusterName/abcdefab-1234-abcd-5678-cdef0123ab01-2/0123abcd-abcd-4f7f-1234-9876543210ef",
           "OperationState": "UPDATE_IN_PROGRESS",
           "OperationSteps": [
               {
                   "StepInfo": {
                       "StepStatus": "IN_PROGRESS"
                   },
                   "StepName": "INITIALIZE_UPDATE"
               },
               {
                   "StepInfo": {
                       "StepStatus": "PENDING"
                   },
                   "StepName": "UPDATE_APACHE_KAFKA_BINARIES"
               },
               {
                   "StepInfo": {
                       "StepStatus": "PENDING"
                   },
                   "StepName": "FINALIZE_UPDATE"
               }
           ],
           "OperationType": "UPDATE_CLUSTER_KAFKA_VERSION",
           "SourceClusterInfo": {
               "KafkaVersion": "2.4.1"
           },
           "TargetClusterInfo": {
               "KafkaVersion": "2.6.1"
           }
       }
   }
   ```

   如果 `OperationState` 的值为 `UPDATE_IN_PROGRESS`，请等待一段时间，然后再次运行 `describe-cluster-operation` 命令。操作完成后，`OperationState` 的值变为 `UPDATE_COMPLETE`。由于 Amazon MSK 完成操作所需的时间各不相同，您可能需要反复检查直到操作完成。

**使用 API 升级 Apache Kafka 版本**

1. 调用该[GetCompatibleKafkaVersions](https://docs.aws.amazon.com//msk/1.0/apireference/compatible-kafka-versions.html#GetCompatibleKafkaVersions)操作以获取您可以将集群升级到的 Apache Kafka 版本列表。

1. 调用该[UpdateClusterKafkaVersion](https://docs.aws.amazon.com//msk/1.0/apireference/clusters-clusterarn-version.html#UpdateClusterKafkaVersion)操作将集群升级到兼容的 Apache Kafka 版本之一。

# 版本升级的最佳实践
<a name="version-upgrades-best-practices"></a>

为了在 Kafka 版本升级过程中执行的滚动更新期间确保客户端连续性，请检查客户端和 Apache Kafka 主题的配置，如下所示：
+ 对于双可用区集群，将主题复制因子（RF）的最小值设置为 `2`，对于三可用区集群，将最小值设置为 `3`。RF 值 `2` 可能会导致修补期间出现离线分区。
+ 将最小同步副本数（minISR）的上限设置为比复制因子（RF）小 1，即 `miniISR = (RF) - 1`。这可以确保分区副本集可以容忍一个副本离线或未完全复制。
+ 将客户端配置为使用多个代理连接字符串。如果支持客户端的特定代理 I/O 开始被修补，则在客户端的连接字符串中包含多个代理可以进行故障转移。有关如何获取具有多个代理的连接字符串的信息，请参阅 [Getting the bootstrap brokers for an Amazon MSK cluster](https://docs.aws.amazon.com//msk/latest/developerguide/msk-get-bootstrap-brokers.html)。
+ 我们建议您将连接客户端升级到推荐的版本或更高版本，以便从新版本提供的功能中受益。客户端升级不受 MSK 集群的 Kafka 版本的生命周期终止（EOL）日期限制，也无需在 EOL 日期之前完成。Apache Kafka 提供了[双向客户端兼容性策略](https://kafka.apache.org/protocol#protocol_compatibility)，允许较旧客户端与较新集群配合使用，反之亦然。
+ 使用版本 3.x.x 的 Kafka 客户端可能具有以下默认值：`acks=all` 和 `enable.idempotence=true`。`acks=all` 与之前的默认值 `acks=1` 不同，它通过确保所有同步副本都确认生成请求来提供额外持久性。同样，`enable.idempotence` 的默认值以前为 `false`。将 `enable.idempotence=true` 更改为默认值可降低重复消息的可能性。这些更改被视为最佳实践设置，可能会带来少量额外延迟，但这在正常性能参数范围内。
+ 创建新的 MSK 集群时，请使用推荐的 Kafka 版本。使用推荐的 Kafka 版本可让您受益于最新的 Kafka 和 MSK 功能。