本文說明如何監控 Managed Service for Apache Kafka 叢集,確保 Kafka 工作負載的可靠性。
總覽
可靠性是指系統在一段時間內持續正確運作的能力。對於以 Kafka 為基礎的工作負載,可靠性涵蓋 Kafka 叢集本身,以及產生和使用訊息的用戶端應用程式。
Managed Service for Apache Kafka 的設計可容許許多常見故障,並從中復原。舉例來說,這項服務會將副本放在不同區域,以達到容錯能力,並自動重新啟動失敗的代理程式。不過,其他影響可靠性的因素並非服務直接控管,例如:
- 用戶端設定
- 叢集負載,包括平均負載和尖峰負載
- 分區和副本數量
- 主題設定,例如訊息保留時間
為確保作業可靠,請務必監控叢集的這些作業參數,並將其維持在建議範圍內。以下各節說明幾項重要的可靠性指標。
叢集容量
為避免叢集過載,請監控下列信號。建立快訊,在這些指標長時間超出建議範圍時收到通知。
CPU 使用率。請盡量將所有代理程式的 CPU 使用率維持在 80% 以下。
代理程式磁碟使用率:請確保代理程式磁碟使用率低於 80%。
分區數量。請盡量為每個代理程式維持少於 4000 個分區,每個叢集少於 100,000 個分區。
如果叢集容量不足,請考慮採取下列緩解措施:
增加叢集的 vCPU 數量。詳情請參閱「更新 Kafka 叢集」。
擴大叢集規模,新增更多代理程式。如要瞭解服務如何佈建代理程式,請參閱「代理程式佈建」。
下表列出這些指標的 Prometheus 查詢語言 (PromQL) 查詢,您可以將這些查詢新增至自訂 Cloud Monitoring 資訊主頁。
| 信號 | PromQL 查詢 |
|---|---|
| CPU 使用率 | rate( { "managedkafka.googleapis.com/cpu/core_usage_time", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) / min_over_time( { "managedkafka.googleapis.com/cpu/limit", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) |
| 代理程式磁碟使用率 | max_over_time( { "managedkafka.googleapis.com/disk/used_bytes", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) / min_over_time( { "managedkafka.googleapis.com/disk/limit", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) |
| 每個分區的區隔大小 | # Assumes that segment files are 225 MiB. Check your cluster configuration. 2*225*(1024*1024) * max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) / min_over_time( { "managedkafka.googleapis.com/disk/limit", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) |
| 每個代理程式的分區數 | max by (resource_container, location, cluster_id, broker_index) ( max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| 每個叢集的分區數 | max by (resource_container, location, cluster_id) ( max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
分區失衡
負載不均可能會導致 Kafka 叢集無法正常處理用戶端要求。指派給單一代理程式的分區數量,應維持在每個代理程式平均分區數量的 10% 左右。找出這項指標的離群值。
如要維持平衡的分區,請考慮在叢集中啟用自動重新平衡 (擴充時)。
下表顯示可用於監控分割區不平衡的 PromQL 查詢。
| 信號 | PromQL 查詢 |
|---|---|
| 每個代理程式的分區數量 | sum by (resource_container, location, cluster_id, broker_index) ( avg_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| 分區失衡 | sum by (resource_container, location, cluster_id, broker_index) ( avg_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) / on (resource_container, location, cluster_id) group_left avg by (resource_container, location, cluster_id) ( avg_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) - 1 |
分區複製
資料複製是確保工作負載容錯的重要做法。在運作正常的叢集中,主題中的每個分區都會有完整數量的副本,具體數量取決於主題設定的複寫因數。
請使用下列信號監控分割區複製作業:
低於最低同步副本 (ISR) 數量。如果分割區的同步 ISR 數量少於設定的最小值 (
min.insync.replicas),資料遺失和可用性風險就會很高。通常是由於一或多個代理程式的容量不足,或是基礎架構故障所致。複寫不足的分區。當同步副本數量低於副本係數時,分割區會處於副本不足狀態。如果分割區在數十分鐘內仍未完成複寫,可能是代理程式、儲存空間容量或其他項目發生問題。
在滾動重新啟動期間,經紀人會在重新啟動時無法使用,導致暫時複製不足。這是正常情況,不必採取行動。
下表顯示可用於監控複寫作業的 PromQL 查詢。
| 信號 | PromQL 查詢 |
|---|---|
| 低於最低 ISR | max by ( resource_container, location, cluster_id ) ( max_over_time( { "managedkafka.googleapis.com/broker/under_min_isr_partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| 複製中 | max by ( resource_container, location, cluster_id ) ( min_over_time( { "managedkafka.googleapis.com/broker/under_replicated_partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[10m:${__interval}] ) ) |