

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

# 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 型版本時，您必須建立新的叢集。然後，將您的資料複製到新叢集，並將用戶端切換到新叢集。

   1. （選用） 選擇**更新叢集組態**核取方塊，以套用與新版本相容的組態更新。這可啟用新版本的功能和改進。

      如果您需要維護現有的自訂組態，可以略過此步驟。
**注意**  
伺服器端升級不會自動更新用戶端應用程式。
為了維持叢集穩定性，不支援版本降級。

   1. 選擇**升級**以開始程序。

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

1. 執行下列命令，使用您在建立叢集時獲得的 Amazon Resource Name (ARN) 取代 *ClusterArn*。若您沒有叢集的 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. 執行下列命令，使用您在建立叢集時獲得的 Amazon Resource Name (ARN) 取代 *ClusterArn*。若您沒有叢集的 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) 操作或 [describe-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kafka/describe-cluster.html) AWS CLI 命令。範例版本為`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` 操作的結果，請執行下列命令，使用您在 `update-cluster-kafka-version` 命令輸出中取得的 ARN 取代 *ClusterOperationArn*。

   ```
   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 的特定代理程式開始修補，則用戶端連線字串中有多個代理程式允許容錯移轉。如需如何取得具有多個代理程式的連線字串的詳細資訊，請參閱[取得 Amazon MSK 叢集的引導代理](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 功能。