監控 Kafka 叢集的可靠性

本文說明如何監控 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}]
  )
)

後續步驟