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

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

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

當您想要從 Amazon 阿帕奇卡夫卡受管串流 (MSK) 佈建叢集中移除代理程式時,請使用此 Amazon MSK 作業。您可以移除一組代理程式來減少叢集的儲存和運算容量,而不會影響可用性、資料耐久性風險或資料串流應用程式中斷。

您可以在叢集中新增更多代理程式以處理流量增加,並在流量消退時移除代理程式。透過新增和移除代理程式功能,您可以充分利用叢集容量,並最佳化 MSK 基礎架構成本。移除代理程式可讓您控制現有叢集容量的代理程式層級,以符合工作負載需求,並避免移轉至其他叢集。

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

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

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

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

代理去除在卡夫卡 2.8.1 及以上版本支持,包括在卡夫卡模式集群。

準備通過刪除所有分區刪除經紀人

在開始代理刪除過程之前,首先移動所有分區,除了主題的分區以__amazon_msk_canary及您打算刪除的代理程序__amazon_msk_canary_state中的分區。這些是 Amazon MSK 針對叢集健康狀態和診斷指標所建立的內部主題。

您可以使用卡夫卡管理 API 或巡航控制將分區移動到您打算保留在集群中的其他代理。請參閱重新指派分割區

移除分割區的範例程序

本節是如何從要刪除的代理程序中刪除分區的示例。假設您有一個包含 6 個代理程式、每個 AZ 中有 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__consumer_offsets__amazon_msk_connect_offsets_my-mskc-connector_12345678-09e7-c657f7e4ff32-2、、和msk-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. 當狀態指出每個分割區的分割區重新指派已完成時,請監視 5 分鐘的UserPartitionExists測量結果,以確保它會顯示0給您移動分割區的代理程式。確認完成後,您可以繼續從叢集中移除 Broker。

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

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

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

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

  4. 輸入您希望叢集擁有每個可用區域的代理程式數目。主控台會摘要列出將要移除的可用區域中代理程式數目。確保這是你想要的。

  5. 選擇儲存變更

為了防止意外刪除代理程序,控制台要求您確認要刪除代理程序。

使用 AWS CLI 移除代理程式

執行下列命令,取代ClusterArn為建立叢集時取得的 Amazon 資源名稱 (ARN)。若您沒有叢集的 ARN,可透過列出所有叢集來找到該 ARN。如需詳細資訊,請列出 Amazon MSK 叢集Current-Cluster-Version以目前版本的叢集取代。

重要

叢集版本不是簡單的整數。若要尋找叢集的目前版本,請使用DescribeCluster作業或描述 AWS CLI 叢集指令。範例版本為KTVPDKIKX0DER

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 Apache 卡夫卡 API 受管串流參考中的UpdateBroker計數