規劃 Managed Service for Apache Kafka 叢集的大小

本文說明如何預估 Managed Service for Apache Kafka 叢集所需的運算資源,以及如何調整現有叢集的大小。

建立 Managed Service for Apache Kafka 叢集時,請選擇叢集大小的下列參數:

  • vCPUs:叢集中的 vCPU 數量。vCPU 數量下限為 3。

  • 記憶體:每個 vCPU 的記憶體容量。每個 vCPU 必須佈建 1 GiB 至 8 GiB 的記憶體。

叢集建立後,您就能更新這些值。

選擇初始叢集大小

如要選擇初始叢集大小,請先根據特定工作負載估算下列值。

  • 寫入輸送量:生產端傳送資料至叢集的總速率,以 MBps 為單位。
  • 讀取輸送量:消費者從叢集讀取資料的總速率,以 MBps 為單位。

如要估算處理此輸送量所需的叢集大小,請執行下列步驟:

  1. 計算總寫入頻寬,包括複製

    Total write bandwidth = produce rate * replicas

    這個值包括從用戶端到領導者代理程式,以及從領導者到副本代理程式的頻寬。預設備用資源數量為 3。

  2. 計算讀取總頻寬,包括複製作業。

    Total read bandwidth = consume rate + produce rate * ( replicas - 1)

    這個值包括用戶端讀取作業的頻寬 (耗用率),以及副本保持同步所需的頻寬。副本會從分區領導者讀取資料,藉此進行同步處理。使用 (replicas - 1) 這個詞是因為分區領導者不會從任何副本讀取資料。

  3. 計算寫入等效資料速率。

    一般來說,讀取頻寬的處理效率是寫入頻寬的 4 倍。為因應這項差異,請按照下列方式計算寫入等效資料速率:

    Write-equivalent rate = (total write bandwidth) + (total read bandwidth / 4)

  4. 決定目標 vCPU 使用率。這個值代表平均 vCPU 使用率,以 vCPU 容量的百分比表示。實際用量可能會隨時間起伏。

    • 建議您先將使用率目標設為 50%。
    • 如果您知道預期流量模式,請將使用率目標設為平均寫入等效頻寬與必須容納的尖峰頻寬比率。

    一般來說,提高使用率可縮減叢集規模,進而降低叢集成本,但如果流量超出預估值,風險也會隨之提高。vCPU 使用率過高可能會導致延遲時間增加和發生錯誤。

  5. 計算 vCPU 數量。

    vCPU count = ceiling (write-equivalent rate / 20 MBps / utilization)

    單一可用區中單一 vCPU 的預估容量為 20 MBps。 因此,如果 vCPU 的使用率為 100%,則需要 (write-equivalent rate / 20) 個 vCPU。如要取得實際數字,請將該值除以目標使用率,然後無條件進位。

    此外,如果批次傳送的訊息小於 10 KB,每個 CPU 的總處理量會低於此處的基準。在這種情況下,請考量處理量減少,或考慮傳送較大的批次。

  6. 估算所需記憶體。建議每個 vCPU 使用 4 GiB 的 RAM。

    Memory = vCPU count * 4 GiB

請使用實際工作負載進行測試,以取得最準確的大小。監控叢集的資源用量,並視需要擴充資源。

計算範例

假設工作負載的寫入速率為 50 MBps,讀取速率為 100 MBps,且有 3 個副本,目標 vCPU 使用率為 50%。

  1. Total write bandwidth = 50 MBps * 3 replicas = 150 MBps
  2. Total read traffic = 100 MBps + 50 MBps * (3 - 1) = 200 MBps
  3. Write-equivalent rate = 150 MBps + (200 MBps / 4) = 200 MBps
  4. Target utilization = 0.5
  5. Number of vCPUs = ceiling (200 MBps / 20 MBps / 0.5) = 20 vCPUs
  6. Memory = 20 vCPUs * 4 GiB = 80 GiB

代理程式

建立叢集時,系統會在三個區域的每個區域中,佈建至少一個代理程式。代理程式會盡可能平均分配到各個區域,且所有代理程式的 vCPU 數量相同。經紀人數可透過下列公式計算:

number of brokers = max(3, ceiling(vCPUs / 15))

舉例來說,如果叢集有 75 個 vCPU,一開始會有 5 個代理程式。

如果變更 vCPU 數量,系統會將 vCPU 分配給現有代理程式,每個代理程式最多可分配 15 個 vCPU。如果叢集大小超過每個代理程式 15 個 vCPU,系統會佈建新的代理程式。佈建新的代理程式後,可以縮減至 1 個 vCPU,但無法刪除。

更新叢集大小

建立 Managed Service for Apache Kafka 叢集後,您可以調整 vCPU 數量和記憶體,以滿足需求。更新現有叢集時,請遵守下列規則:

  • 叢集的整體 vCPU 與記憶體比例必須介於 1:1 和 1:8 之間。

  • 如果縮減規模,每個現有代理程式必須至少有 1 個 vCPU 和 1 GiB 的記憶體。經紀人數絕不會減少。

  • 如果擴充規模後新增了代理程式,與更新前相比,每個代理程式的平均 vCPU 和記憶體用量不得減少超過 10%。

    舉例來說,如果您嘗試將叢集從 45 個 vCPU (3 個代理程式) 擴充至 48 個 vCPU (4 個代理程式),作業就會失敗。這是因為每個代理程式的平均 vCPU 數量從 15 個減少至 12 個,減少幅度為 20%,超過 10% 的限制。

如果需要減少超過 10% 的 CPU 數量,建議分階段減少。每次更新後,請監控資源用量,並視需要重新平衡分割區。

不過,如果您確信更新後,經紀人會有足夠的容量,可以停用這項檢查。如要停用檢查,請在 gcloud managed-kafka clusters update 指令中將 allow_broker_downscale_on_cluster_upscale 標記設為 true。這個標記表示您接受潛在的效能風險。

如要更新叢集,請參閱「更新 Managed Service for Apache Kafka 叢集」。

更新作業範例

以下範例的叢集一開始有 75 個 vCPU130 GiB RAM5 個代理程式

升級作業失敗的範例

將叢集擴充至 80 個 vCPU140 GiB RAM

  • 服務會判斷是否需要新的代理程式。

    • 向上取整 (80 個 vCPU / 15) = 6 個代理程式

    叢集會從 5 個代理程式增加到 6 個,因此會觸發 10% 的安全檢查。

  • 目前每位經紀人的平均值如下:

    • 75 個 vCPU / 5 個代理程式 = 每個代理程式 15 個 vCPU

    • 130 GiB / 5 個代理程式 = 每個代理程式 26 GiB

  • 使用 6 個中介服務時,新的平均值如下:

    • 80 個 vCPU / 6 個代理程式 = 每個代理程式 13.33 個 vCPU,減少 11.1%

    • 140 GiB / 6 個代理程式 = 每個代理程式 23.33 GiB,減少 10.2%

    由於這些平均值超過 10%,因此作業會失敗。

成功升級作業的範例

將叢集擴充至 85 個 vCPU150 GiB RAM

  • 服務會判斷是否需要新的代理程式。

    • ceiling (85 個 vCPU / 15) = 6 個代理程式

    叢集會從 5 個代理程式增加到 6 個,因此會觸發 10% 的安全檢查。

  • 目前每位經紀人的平均值如下:

    • 75 個 vCPU / 5 個代理程式 = 每個代理程式 15 個 vCPU

    • 130 GiB / 5 個代理程式 = 每個代理程式 26 GiB

  • 使用 6 個中介服務時,新的平均值如下:

    • 85 個 vCPU / 6 個代理程式 = 每個代理程式 14.17 個 vCPU,減少 5.5%

    • 150 GiB / 6 個代理程式 = 每個代理程式 25 GiB,減少 3.8%

這項作業會成功,因為每個代理程式的平均 vCPU 和記憶體減少量在 10% 限制內。

後續步驟