搭配 LinkedInAmazon 使用適用於 Apache Kafka 的 Cruise Control MSK - Amazon Managed Streaming for Apache Kafka

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

搭配 LinkedInAmazon 使用適用於 Apache Kafka 的 Cruise Control MSK

您可以使用 LinkedIn的 Cruise Control 來重新平衡 Amazon MSK叢集、偵測和修正異常,以及監控叢集的狀態和運作狀態。

下載並建立 Cruise Control
  1. 在與 Amazon MSK叢集相同的 Amazon 中建立 VPC Amazon EC2執行個體。

  2. 在您在上一個步驟中建立的 Amazon EC2執行個體上安裝 Prometheus。請記下私有 IP 和連接埠。預設連接埠號碼為 9090。如需有關如何設定 Prometheus 來彙整您叢集指標的詳細資訊,請參閱 使用 Prometheus 監控MSK佈建叢集

  3. 在 Amazon EC2執行個體上下載 Cruise Control。(或者,如果您願意,也可以使用單獨的 Amazon EC2執行個體進行 Cruise Control。) 若為使用 Apache Kafka 2.4.* 版的叢集,請使用最新的 2.4.* Cruise Control 版。若您叢集的 Apache Kafka 版本低於 2.4.*,請使用最新的 2.0.* Cruise Control 版。

  4. 解壓縮 Cruise Control 檔案,然後前往已解壓縮的文件夾。

  5. 執行以下命令來安裝 git。

    sudo yum -y install git
  6. 執行以下命令來初始化本機儲存庫。Your-Cruise-Control-Folder 將 取代為目前資料夾的名稱 (您解壓縮 Cruise Control 下載時取得的資料夾)。

    git init && git add . && git commit -m "Init local repo." && git tag -a Your-Cruise-Control-Folder -m "Init local version."
  7. 執行以下命令來建置原始碼。

    ./gradlew jar copyDependantLibs
設定和執行 Cruise Control
  1. config/cruisecontrol.properties 檔案進行以下更新。將範例引導伺服器和引導代理程式字串取代為叢集的值。若要取得叢集的這些字串,請在主控台中查看叢集詳細資料。或者,您可以使用 GetBootstrapBrokersDescribeClusterAPI操作或其對CLI等項目。

    # If using TLS encryption, use 9094; use 9092 if using plaintext bootstrap.servers=b-1.test-cluster.2skv42.c1.kafka.us-east-1.amazonaws.com:9094,b-2.test-cluster.2skv42.c1.kafka.us-east-1.amazonaws.com:9094,b-3.test-cluster.2skv42.c1.kafka.us-east-1.amazonaws.com:9094 # SSL properties, needed if cluster is using TLS encryption security.protocol=SSL ssl.truststore.location=/home/ec2-user/kafka.client.truststore.jks # Use the Prometheus Metric Sampler metric.sampler.class=com.linkedin.kafka.cruisecontrol.monitor.sampling.prometheus.PrometheusMetricSampler # Prometheus Metric Sampler specific configuration prometheus.server.endpoint=1.2.3.4:9090 # Replace with your Prometheus IP and port # Change the capacity config file and specify its path; details below capacity.config.file=config/capacityCores.json

    對於快速代理程式,建議您不要DiskCapacityGoal分析器組態中設定的任何目標中使用 。

  2. 編輯 config/capacityCores.json 檔案以指定正確的磁碟大小和CPU核心,以及網路輸入/輸出限制。對於 Express 代理程式,只需要DISK容量項目來設定 Cruise Control。由於 會MSK管理 Express 代理程式的所有儲存體,因此您應該將此值設定為極高的數字,例如 Integer.MAX_VALUE (2147483647)。對於標準代理程式,您可以使用 DescribeClusterAPI操作 (或 describe-cluster CLI) 來取得磁碟大小。如需CPU核心和網路輸入/輸出限制,請參閱 Amazon EC2執行個體類型

    Standard broker config/capacityCores.json
    { "brokerCapacities": [ { "brokerId": "-1", "capacity": { "DISK": "10000", "CPU": { "num.cores": "2" }, "NW_IN": "5000000", "NW_OUT": "5000000" }, "doc": "This is the default capacity. Capacity unit used for disk is in MB, cpu is in number of cores, network throughput is in KB." } ] }
    Express broker config/capacityCores.json
    { "brokerCapacities":[ { "brokerId": "-1", "capacity": { "DISK": "2147483647", "CPU": {"num.cores": "16"}, "NW_IN": "1073741824", "NW_OUT": "1073741824" }, "doc": "This is the default capacity. Capacity unit used for disk is in MB, cpu is in number of cores, network throughput is in KB." } ] }
  3. 您可選擇安裝 Cruise Control UI。若要下載,請前往 Setting Up Cruise Control Frontend

  4. 執行以下命令以啟動 Cruise Control。請考慮使用類似 screentmux 之工具以持續開啟長時間執行的工作階段。

    <path-to-your-kafka-installation>/bin/kafka-cruise-control-start.sh config/cruisecontrol.properties 9091
  5. 使用 Cruise Control APIs或 UI 來確保 Cruise Control 具有叢集負載資料,且正在提出重新平衡建議。可能需要花費幾分鐘來取得指標的有效視窗。

    重要

    只有 Cruise Control 2.5.60 版和更新版本與 Express 代理程式相容,因為 Express 代理程式不會公開 Zookeeper 端點。

使用 Amazon Cruise Control 的自動化部署範本 MSK

您也可以使用此CloudFormation 範本輕鬆部署 Cruise Control 和 Prometheus,以更深入地了解 Amazon MSK叢集的效能並最佳化資源使用率。

主要特色
  • 使用 Cruise Control 和 Prometheus 預先設定自動佈建 Amazon EC2執行個體。

  • 支援 Amazon MSK佈建叢集。

  • 使用 PlainText 和 IAM進行彈性身分驗證。

  • 沒有 Cruise Control 的 Zookeeper 相依性。

  • 透過提供存放在 Amazon S3 儲存貯體中的您自己的組態檔案,輕鬆自訂 Prometheus 目標、Cruise Control 容量設定和其他組態。

分割區重新平衡準則

Kafka 分割區重新指派的準則

Kafka 中的分割區重新指派可能會耗費大量資源,因為它涉及跨代理程式傳輸大量資料,可能導致網路壅塞並影響用戶端操作。下列最佳實務可協助您有效管理分割區重新指派,方法是調校節流率、利用並行控制,以及了解重新指派類型,以將叢集操作的中斷降至最低。

在 Cruise Control 中管理並行

Cruise Control 提供自動調整參數,以控制分割區和領導移動的並行。下列參數有助於在重新指派期間維持可接受的負載:

  • 並行分割區移動上限:定義 num.concurrent.partition.movements.per.broker以限制並行中介器間分割區移動,避免過度的網路使用率。

    範例
    num.concurrent.partition.movements.per.broker = 5

    此設定會限制每個代理程式在任何指定時間移動不超過 10 個分割區,平衡代理程式之間的負載。

使用調節來控制頻寬

  • 調節參數:使用 執行分割區重新指派時kafka-reassign-partitions.sh,請使用 --throttle parameter設定代理程式之間的資料移動最大傳輸速率 (以每秒位元組為單位)。

    範例
    --throttle 5000000

    這會設定最大頻寬 5 MB/s。

  • 平衡調節設定:選擇適當的調節速率至關重要:

    如果設定太低,重新指派可能需要較長的時間。

    如果設定過高,用戶端可能會遇到延遲增加的情況。

  • 從保守的節流率開始,並根據叢集效能監控進行調整。在套用到生產環境之前,請先測試您選擇的調節,以找出最佳平衡。

在預備環境中測試和驗證

在生產環境中實作重新指派之前,請在具有類似組態的預備環境中執行負載測試。這可讓您微調參數,並將即時生產中的意外影響降至最低。