Memantau keandalan cluster Kafka

Dokumen ini menjelaskan cara memantau cluster Managed Service untuk Apache Kafka guna memastikan keandalan workload Kafka Anda.

Ringkasan

Keandalan adalah kemampuan sistem untuk beroperasi dengan benar dan konsisten dari waktu ke waktu. Untuk workload berbasis Kafka, keandalan mencakup cluster Kafka itu sendiri, serta aplikasi klien yang membuat dan menggunakan pesan.

Managed Service untuk Apache Kafka dirancang untuk mentoleransi dan memulihkan dari banyak kegagalan umum. Misalnya, layanan ini menempatkan replika di zona yang berbeda untuk toleransi fault, dan otomatis memulai ulang broker yang gagal. Namun, faktor lain yang memengaruhi keandalan berada di luar kontrol langsung layanan, seperti:

  • Konfigurasi klien
  • Beban pada cluster, termasuk beban rata-rata dan lonjakan
  • Jumlah partisi dan replika
  • Konfigurasi topik, seperti retensi pesan

Untuk mencapai operasi yang andal, penting untuk memantau cluster untuk parameter operasional ini dan mempertahankannya dalam rentang yang direkomendasikan. Bagian berikut menjelaskan beberapa metrik utama yang penting untuk keandalan.

Kapasitas cluster

Untuk menghindari kelebihan beban pada cluster, pantau sinyal berikut. Buat pemberitahuan untuk memberi tahu Anda jika sinyal tersebut berada di luar rentang yang direkomendasikan untuk jangka waktu yang lama.

  • Penggunaan CPU. Upayakan untuk menjaga penggunaan CPU di bawah 80% pada semua broker.

  • Penggunaan disk broker: Pastikan penggunaan disk broker tetap kurang dari 80%.

  • Jumlah partisi. Upayakan untuk mempertahankan kurang dari 4.000 partisi per broker, dan kurang dari 100.000 partisi per cluster.

Jika cluster Anda memiliki kapasitas rendah, pertimbangkan mitigasi berikut:

  • Tingkatkan jumlah vCPU cluster. Untuk mengetahui informasi selengkapnya, lihat Mengupdate cluster Kafka.

  • Tingkatkan skala cluster untuk menambahkan lebih banyak broker. Untuk mengetahui informasi tentang cara layanan menyediakan broker, lihat Penyediaan broker.

Tabel berikut menampilkan kueri Bahasa Kueri Prometheus (PromQL) untuk metrik ini yang dapat Anda tambahkan ke dasbor Cloud Monitoring kustom.

SinyalKueri PromQL
Penggunaan 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}]
)
Penggunaan disk broker
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}]
)
Ukuran segmen per partisi
# 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}]
)
Partisi per broker
max by (resource_container, location, cluster_id, broker_index) (
  max_over_time(
    {
      "managedkafka.googleapis.com/partitions",
      monitored_resource="managedkafka.googleapis.com/Cluster"
    }[${__interval}]
  )
)
Partisi per cluster
max by (resource_container, location, cluster_id) (
  max_over_time(
    {
      "managedkafka.googleapis.com/partitions",
      monitored_resource="managedkafka.googleapis.com/Cluster"
    }[${__interval}]
  )
)

Ketidakseimbangan partisi

Beban yang tidak merata dapat mencegah cluster Kafka menayangkan permintaan klien dengan benar. Jumlah partisi yang ditetapkan ke satu broker harus tetap berada dalam sekitar 10% dari jumlah partisi rata-rata per broker. Cari nilai ekstrem dalam metrik ini.

Untuk mempertahankan partisi yang seimbang, pertimbangkan untuk mengaktifkan penyeimbangan ulang otomatis pada peningkatan skala di cluster Anda.

Tabel berikut menampilkan kueri PromQL yang dapat Anda gunakan untuk memantau ketidakseimbangan partisi.

SinyalKueri PromQL
Jumlah partisi per broker
sum by (resource_container, location, cluster_id, broker_index) (
  avg_over_time(
    {
      "managedkafka.googleapis.com/partitions",
      monitored_resource="managedkafka.googleapis.com/Cluster"
    }[${__interval}]
  )
)
Ketidakseimbangan partisi
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

Replikasi partisi

Replikasi data sangat penting untuk memastikan workload Anda memiliki toleransi fault. Dalam cluster yang sehat, setiap partisi dalam topik memiliki jumlah replika penuh, berdasarkan faktor replikasi yang dikonfigurasi topik .

Gunakan sinyal berikut untuk memantau replikasi partisi:

  • Di bawah replika dalam sinkronisasi (ISRs) minimum. Jika partisi memiliki ISRs dalam sinkronisasi yang lebih sedikit daripada minimum yang dikonfigurasi (min.insync.replicas), ada risiko serius kehilangan data dan ketersediaan. Biasanya, situasi ini disebabkan oleh kapasitas yang tidak memadai pada satu atau beberapa broker, atau oleh kegagalan infrastruktur.

  • Partisi yang tidak direplikasi. Partisi tidak direplikasi jika jumlah replika dalam sinkronisasi berada di bawah faktor replikasi. Jika partisi tetap tidak direplikasi selama 10 menit, mungkin ada masalah dengan broker, kapasitas penyimpanan, atau hal lainnya.

    Selama memulai ulang bergilir, broker tidak akan tersedia saat dimulai ulang, sehingga menyebabkan replikasi sementara. Situasi ini diharapkan dan tidak memerlukan intervensi.

Tabel berikut menampilkan kueri PromQL yang dapat Anda gunakan untuk memantau replikasi.

SinyalKueri PromQL
Di bawah ISRs minimum
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}]
  )
)
Di bawah replikasi
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}]
  )
)

Langkah berikutnya