規劃 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

分區副本限制

每個叢集和每個代理程式的資料分割副本數量都有上限,因此在調整叢集大小時,請務必考量這些限制。

每個叢集最多可有 100,000 個分區副本。這是硬性限制,與叢集中的代理程式數量無關。如果工作負載需要超過 100,000 個分割區副本,請考慮將其分配到兩個以上的叢集。

每個代理程式的限制為 4,000 個分區副本。這並非硬性限制。如需處理超過這個數量的副本,請考慮擴充叢集,以佈建更多代理程式。如要瞭解服務如何判斷代理程式數量,請參閱「代理程式佈建」。

擁有足夠的代理程式來處理分割區後,即可擴充代理程式大小,以因應輸送量。

更新叢集大小

建立 Managed Service for Apache Kafka 叢集後,您可以視需求調整 vCPU 數量和記憶體。詳情請參閱「更新 Managed Service for Apache Kafka 叢集」。

更新現有叢集時,請遵守下列規則:

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

  • 每個現有代理程式都必須至少有 1 個 vCPU 和 1 GiB 的記憶體。代理程式數量不會減少。

  • 如果叢集有自訂磁碟設定,更新作業必須符合本機儲存空間的磁碟設定規定。

  • 如果擴大,與更新前的平均值相比,每個代理程式的平均 vCPU 和記憶體不得減少超過 10%。舉例來說,如果您嘗試將叢集從 45 個 vCPU (3 個代理程式) 擴充至 48 個 vCPU (4 個代理程式),每個代理程式的平均 vCPU 數量會從 15 個減少至 12 個,減少幅度為 20%,超過 10% 的限制。

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

    不過,如果您確信更新後代理程式會有足夠的容量,可以執行 gcloud managed-kafka clusters update 指令並加上 allow_broker_downscale_on_cluster_upscale=true 旗標,停用這項檢查。這個標記表示您接受潛在的效能風險。

更新作業範例

以下範例的叢集一開始有 75 個 vCPU、130 GiB RAM 和 5 個代理程式。

提升品質失敗的範例

將叢集擴充至 80 個 vCPU 和 140 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 個 vCPU 和 150 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% 限制內。

估算所需磁碟大小

根據預設,Managed Service for Apache Kafka 會為每個代理程式的每個 vCPU 分配 100 GiB。預設分配量可為大多數工作負載提供足夠的本機儲存空間,但您可以設定代理程式磁碟大小,以符合特定需求。本節說明如何預估所需的磁碟容量。

代理程式收到訊息時,會將訊息寫入本機區段檔案。 當區隔檔案達到大小或時間上限時,系統會關閉 (或「捲動」) 檔案,並移至遠端儲存空間。片段檔案大小上限由 log.roll.bytes 設定指定,片段存在時間上限則由 log.segment.ms 設定指定。

區隔檔案捲動時,中介程式會開啟新的區隔檔案。代理程式將捲動的區段複製到遠端儲存空間時,該區段仍會保留在本機儲存空間中。因此,每個分割區都必須有足夠空間儲存捲動的區隔檔案,以及在捲動的區隔檔案移至遠端儲存空間時,儲存新區隔檔案的空間。

根據預設,區隔檔案大小上限為 230 MiB。對於使用率中等的叢集,您可以假設每個分割區需要 250 MiB,以便在移動已捲動的區段時提供額外的緩衝空間。根據這項假設,每個代理程式的最小磁碟大小為:

250 MiB * partition count * replication factor / broker count

不過,所需大小取決於多項因素,例如區隔檔案大小上限、叢集負載、新資料寫入速率,以及寫入長期儲存空間的延遲時間。

請務必在每個代理程式上保留一些未使用的磁碟容量。如果代理程式沒有磁碟容量,行為將無法預測,可能導致資料遺失和叢集不穩定。監控磁碟使用量 (disk/used_bytes) 與可用磁碟總大小 (disk/limit)。如果磁碟使用量超過可用磁碟總大小的 80%,請設定較大的磁碟大小。詳情請參閱「監控叢集容量」。

後續步驟

Apache Kafka® 是 The Apache Software Foundation 或其在美國和/或其他國家/地區的關聯企業的註冊商標。