本頁面說明如何使用配額,控管 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。
定義下列殼層變數:
export BOOTSTRAP=BOOTSTRAP_ADDRESS export TOPIC=TOPIC_NAME export KAFKA_USER=PROJECT_NUMBER-compute@developer.gserviceaccount.com如要找出基準輸送量,請使用
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 速率。
假設您想將生產端限制設為 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重複執行效能測試。輸出結果會顯示較低的輸送量:
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 秒的間隔內,處理量都符合配額。由於配額限制,測試產生資料的速度會比傳送資料的速度快,因此延遲時間也會增加。
後續步驟