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.
| Sinyal | Kueri 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.
| Sinyal | Kueri 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.
| Sinyal | Kueri 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
- Memantau cluster Kafka
- Memantau aplikasi klien Kafka
- Merencanakan ukuran cluster Kafka
- Membuat dan mengelola dasbor kustom