從 Amazon MSK叢集中移除代理程式 - Amazon Managed Streaming for Apache Kafka

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

從 Amazon MSK叢集中移除代理程式

當您想要從 Amazon Managed Streaming for Apache Kafka (MSK) 佈建叢集中移除代理程式時,請使用此 Amazon MSK操作。您可以透過移除一組代理程式來減少叢集的儲存和運算容量,而不會對資料串流應用程式造成可用性影響、資料耐久性風險或中斷。

您可以在叢集中新增更多代理程式來處理流量增加,並在流量下降時移除代理程式。透過代理程式新增和移除功能,您可以充分利用叢集容量並最佳化MSK基礎設施成本。代理程式移除可讓您對現有叢集容量進行代理程式層級控制,以符合工作負載需求,並避免遷移至另一個叢集。

使用 AWS 主控台、命令列介面 (CLI)SDK、 或 AWS CloudFormation 來減少佈建叢集的代理程式計數。MSK 挑選沒有任何分割區的代理程式 ( Canary 主題除外),並防止應用程式向這些代理程式產生資料,同時安全地從叢集中移除這些代理程式。

如果您想要減少叢集的儲存和運算,您應該為每個可用區域移除一個代理程式。例如,您可以從兩個可用區域叢集中移除兩個代理程式,或在單一代理程式移除操作中從三個可用區域叢集中移除三個代理程式。

如需從叢集中移除代理程式後如何重新平衡分割區的詳細資訊,請參閱 重新指派分割區

無論執行個體大小為何,您都可以從所有 M5 和 M7g 型MSK佈建叢集中移除代理程式。

Kafka 2.8.1 版及更高版本支援代理程式移除,包括KRaft模式叢集。

準備透過移除所有分割區來移除代理程式

開始代理程式移除程序之前,請先移動所有分割區,主題__amazon_msk_canary和您計劃移除的__amazon_msk_canary_state代理程式除外。這些是 Amazon 為叢集運作狀態和診斷指標MSK建立的內部主題。

您可以使用 Kafka 管理員APIs或 Cruise Control,將分割區移至您要保留在叢集中的其他代理程式。請參閱重新指派分割區

移除分割區的範例程序

本節範例說明如何從您要移除的代理程式中移除分割區。假設您有一個叢集,每個 AZ 中有 6 個代理程式、2 個代理程式,並且有四個主題:

  • __amazon_msk_canary

  • __consumer_offsets

  • __amazon_msk_connect_offsets_my-mskc-connector_12345678-09e7-c657f7e4ff32-2

  • msk-brk-rmv

  1. 如建立用戶端機器 中所述建立用戶端機器

  2. 設定用戶端機器後,請執行下列命令來列出叢集中的所有可用主題。

    ./bin/kafka-topics.sh --bootstrap-server “CLUSTER_BOOTSTRAP_STRING” --list

    在此範例中,我們看到四個主題名稱:__amazon_msk_canary__amazon_msk_connect_offsets_my-mskc-connector_12345678-09e7-c657f7e4ff32-2__consumer_offsetsmsk-brk-rmv

  3. 在用戶端機器topics.json上建立名為 的 json 檔案,並新增所有使用者主題名稱,如下列程式碼範例所示。您不需要包含__amazon_msk_canary主題名稱,因為這是服務受管主題,必要時會自動移動。

    { "topics": [ {"topic": "msk-brk-rmv"}, {"topic": "__consumer_offsets"}, {"topic": "__amazon_msk_connect_offsets_my-mskc-connector_12345678-09e7-c657f7e4ff32-2"} ], "version":1 }
  4. 執行下列命令,以產生提案,在叢集的 6 個代理程式中,僅將分割區移至 3 個代理程式。

    ./bin/kafka-reassign-partitions.sh --bootstrap-server “CLUSTER_BOOTSTRAP_STRING” --topics-to-move-json-file topics.json --broker-list 1,2,3 --generate
  5. 建立名為 的檔案,reassignment-file.json並複製proposed partition reassignment configuration您從上述命令取得的 。

  6. 執行下列命令,以移動您在 中指定的分割區reassignment-file.json

    ./bin/kafka-reassign-partitions.sh --bootstrap-server “CLUSTER_BOOTSTRAP_STRING” --reassignment-json-file reassignment-file.json --execute

    輸出結果類似如下:

    Successfully started partition reassignments for morpheus-test-topic-1-0,test-topic-1-0
  7. 執行下列命令,以確認所有分割區都已移動。

    ./bin/kafka-reassign-partitions.sh --bootstrap-server “CLUSTER_BOOTSTRAP_STRING” --reassignment-json-file reassignment-file.json --verify

    輸出結果類似如下。監控 狀態,直到請求主題中的所有分割區已成功重新指派為止:

    Status of partition reassignment: Reassignment of partition msk-brk-rmv-0 is completed. Reassignment of partition msk-brk-rmv-1 is completed. Reassignment of partition __consumer_offsets-0 is completed. Reassignment of partition __consumer_offsets-1 is completed.
  8. 當狀態指出每個分割區的分割區重新指派已完成時,請監控UserPartitionExists指標 5 分鐘,以確保其0為您移動分割區的代理程式顯示。確認後,您可以繼續從叢集中移除代理程式。

使用 AWS 管理主控台移除代理程式

使用 AWS 管理主控台移除代理程式
  1. 在 開啟 Amazon MSK主控台https://console.aws.amazon.com/msk/

  2. 選擇包含您要移除之代理程式的MSK叢集。

  3. 在叢集詳細資訊頁面上,選擇動作按鈕,然後選擇編輯代理程式數量選項。

  4. 輸入您希望叢集在每個可用區域擁有的代理程式數量。主控台會摘要將移除的跨可用區域的代理程式數量。請確定您想要的。

  5. 選擇 Save changes (儲存變更)。

為了防止意外移除代理程式,主控台會要求您確認是否要刪除代理程式。

使用 移除代理程式 AWS CLI

執行下列命令,ClusterArn以您在建立叢集時取得的 Amazon Resource Name (ARN) 取代 。如果您沒有叢集ARN的 ,您可以列出所有叢集來尋找它。如需詳細資訊,請列出 Amazon MSK叢集。Current-Cluster-Version 以目前版本的叢集取代 。

重要

叢集版本不是簡單的整數。若要尋找叢集的目前版本,請使用 DescribeCluster操作或 describe-cluster AWS CLI 命令。範例版本為KTVPDKIKX0DER

所以此 Target-Number-of-Brokers 參數代表當此操作成功完成時,您希望叢集擁有的代理節點總數。您為 指定的值 Target-Number-of-Brokers 必須是小於叢集中目前代理程式數量的整數。它也必須是可用區域數量的倍數。

aws kafka update-broker-count --cluster-arn ClusterArn --current-version Current-Cluster-Version --target-number-of-broker-nodes Target-Number-of-Brokers

update-broker-count 此操作的輸出如下所示:JSON。

{ "ClusterOperationInfo": { "ClientRequestId": "c0b7af47-8591-45b5-9c0c-909a1a2c99ea", "ClusterArn": "arn:aws:kafka:us-east-1:012345678012:cluster/exampleClusterName/abcdefab-1234-abcd-5678-cdef0123ab01-2", "CreationTime": "2019-09-25T23:48:04.794Z", "OperationArn": "arn:aws:kafka:us-east-1:012345678012:cluster-operation/exampleClusterName/abcdefab-1234-abcd-5678-cdef0123ab01-2/0123abcd-abcd-4f7f-1234-9876543210ef", "OperationState": "UPDATE_COMPLETE", "OperationType": "DECREASE_BROKER_COUNT", "SourceClusterInfo": { "NumberOfBrokerNodes": 12 }, "TargetClusterInfo": { "NumberOfBrokerNodes": 9 } } }

在此輸出中,OperationTypeDECREASE_BROKER_COUNT。如果 OperationState 具有值 UPDATE_IN_PROGRESS,請稍候一段時間,然後再次執行 describe-cluster-operation 命令。

使用 移除代理程式 AWS API

若要使用 移除叢集中的代理程式API,請參閱 Amazon Managed Streaming for Apache Kafka API參考 UpdateBrokerCount 中的 。