使用 Kafka 配額隔離負載

本頁面說明如何使用配額,控管 Managed Service for Apache Kafka 叢集中的代理程式資源。

總覽

Kafka 可讓您設定配額,限制不同用戶端的頻寬和要求率。您可以透過配額,確保某個應用程式的負載意外暴增時,不會影響其他應用程式。

您可以設定下列配額:

  • 生產者和消費者的網路頻寬。
  • I/O 和網路執行緒的百分比,可做為限制要求率的方法。

如要進一步瞭解 Kafka 配額,請參閱 Kafka 說明文件中的「配額」。Kafka 配額與適用於 Managed Service for Apache Kafka 的Google Cloud 配額不同。

設定配額

您可以為已驗證的主體client-id 群組設定配額。本頁說明如何為主體設定配額,但相同的步驟也適用於client-id群組。

必要條件

開始前,請先在 Compute Engine VM 上安裝 Kafka 指令列工具。VM 必須能連上與叢集連線的子網路。如要建立 VM 並安裝 Kafka 工具,請按照「使用 Kafka 指令列工具產生及取用訊息」中的操作說明進行。

設定網路頻寬配額

如要設定網路頻寬配額,請執行下列 kafka-configs.sh --alter 指令:

kafka-configs.sh --alter \
  --entity-type users \
  --entity-name KAFKA_USER \
  --add-config 'producer_byte_rate=PRODUCER_LIMIT,consumer_byte_rate=CONSUMER_LIMIT' \
  --bootstrap-server=BOOTSTRAP_ADDRESS \
  --command-config client.properties

請替換下列項目。

  • KAFKA_USER:要套用配額的主體。
  • PRODUCER_LIMIT:生產者位元組速率上限,單位為每秒位元組。
  • CONSUMER_LIMIT:消費者位元組速率上限,單位為每秒位元組。
  • BOOTSTRAP_ADDRESS:叢集的啟動位址

設定要求速率配額

如要設定要求率配額,請執行下列 kafka-configs.sh --alter 指令:

kafka-configs.sh --alter \
  --entity-type users \
  --entity-name KAFKA_USER \
  --add-config 'request_percentage=REQUEST_RATE_LIMIT' \
  --bootstrap-server=BOOTSTRAP_ADDRESS \
  --command-config client.properties

請替換下列項目。

  • KAFKA_USER:要套用配額的主體。
  • REQUEST_RATE_LIMIT:允許的 IO 和網路執行緒時間百分比,總共為 (num.io.threads + num.network.threads) * 100%。這個值可以超過 100。
  • BOOTSTRAP_ADDRESS:叢集的啟動位址

查看配額

如要查看為所有主體設定的配額,請執行下列 kafka-configs.sh --describe 指令:

kafka-configs.sh --describe --all \
  --entity-type users \
  --bootstrap-server=BOOTSTRAP_ADDRESS \
  --command-config client.properties

BOOTSTRAP_ADDRESS 替換為叢集的啟動位址

移除配額

如要移除主體的配額,請執行下列 kafka-configs.sh --alter 指令:

kafka-configs.sh --alter \
  --entity-type users \
  --entity-name KAFKA_USER \
  --delete-config 'producer_byte_rate,consumer_byte_rate,request_percentage' \
  --bootstrap-server=BOOTSTRAP_ADDRESS \
  --command-config client.properties

請替換下列項目。

  • KAFKA_USER:要移除配額的主體。
  • BOOTSTRAP_ADDRESS:叢集的啟動位址

範例:限制製作人頻寬

本節說明如何為 Compute Engine 預設服務帳戶設定網路頻寬配額,藉此限制生產者頻寬。根據預設,這個服務帳戶會附加至您建立的所有 Compute Engine VM。

  1. 定義下列殼層變數:

    export BOOTSTRAP=BOOTSTRAP_ADDRESS
    export TOPIC=TOPIC_NAME
    export KAFKA_USER=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    
  2. 如要找出基準輸送量,請使用 kafka-producer-perf-test.sh 指令執行效能測試。

    kafka-producer-perf-test.sh \
      --topic test-topic \
      --num-records 1000000 --throughput 1000 --record-size 1024 \
      --print-metrics \
      --producer-props bootstrap.servers=$BOOTSTRAP \
      --producer.config client.properties
    

    這項指令會將 1000000 筆記錄傳送至指定的 Kafka 主題。--throughput 旗標會將處理量限制為每秒 1,000 則訊息,--record-size 則會將訊息大小設為 1,024 個位元組。因此,這項測試的負載為每秒 (1000 * 1024) 個位元組,約為 1 MBps。

    輸出內容會顯示測試的成效指標,類似於下列內容:

    5005 records sent, 1000.6 records/sec (0.98 MB/sec), 3.7 ms avg latency, 41.0 ms max latency.
    5002 records sent, 1000.2 records/sec (0.98 MB/sec), 3.3 ms avg latency, 23.0 ms max latency.
    

    在本例中,輸送量大約等於要求的 1 MBps 速率。

  3. 假設您想將生產端限制設為 100 kBps,請依下列方式設定生產者輸送量配額:

    kafka-configs.sh --alter \
      --entity-type users \
      --entity-name $KAFKA_USER \
      --add-config 'producer_byte_rate=100000' \
      --bootstrap-server=$BOOTSTRAP \
      --command-config client.properties
    
  4. 重複執行效能測試。輸出結果會顯示較低的輸送量:

    118 records sent, 204.6 records/sec (0.20 MB/sec), 220.7 ms avg latency, 4348.0 ms max latency.
    60 records sent, 10.7 records/sec (0.01 MB/sec), 6145.2 ms avg latency, 9912.0 ms max latency.
    1020 records sent, 181.5 records/sec (0.18 MB/sec), 11693.7 ms avg latency, 14513.0 ms max latency.
    75 records sent, 13.0 records/sec (0.01 MB/sec), 16864.1 ms avg latency, 20219.0 ms max latency.
    1005 records sent, 183.9 records/sec (0.18 MB/sec), 22088.6 ms avg latency, 24679.0 ms max latency.
    75 records sent, 13.0 records/sec (0.01 MB/sec), 27030.4 ms avg latency, 30387.0 ms max latency.
    

    在這個範例中,處理量每秒都會變化,但在任何 2 秒的間隔內,處理量都符合配額。由於配額限制,測試產生資料的速度會比傳送資料的速度快,因此延遲時間也會增加。

    後續步驟