Dokumen ini menjelaskan cara memantau cluster Managed Service untuk Apache Kafka untuk memastikan keandalan workload Kafka Anda.
Ringkasan
Keandalan adalah kemampuan sistem untuk berfungsi dengan benar dan konsisten dari waktu ke waktu. Untuk beban kerja berbasis Kafka, keandalan mencakup cluster Kafka itu sendiri, serta aplikasi klien yang menghasilkan dan menggunakan pesan.
Managed Service untuk Apache Kafka dirancang untuk mentoleransi dan memulihkan diri dari banyak kegagalan umum. Misalnya, layanan menempatkan replika di zona yang berbeda untuk toleransi kesalahan, 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 menjaganya 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 detak jantung berada di luar rentang yang direkomendasikan untuk jangka waktu yang lama.
Penggunaan CPU. Usahakan agar pemakaian CPU di semua broker tidak melebihi 80%.
Penggunaan disk broker: Pastikan penggunaan disk broker tetap di bawah 80%.
Jumlah partisi. Usahakan untuk mempertahankan kurang dari 4.000 partisi per broker, dan kurang dari 100.000 partisi per cluster.
Jika kapasitas cluster Anda 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 menunjukkan kueri Prometheus Query Language (PromQL) untuk metrik ini yang dapat Anda tambahkan ke dasbor Cloud Monitoring kustom.
| Sinyal | Kueri PromQL |
|---|---|
| Pemakaian 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 melayani permintaan klien dengan benar. Jumlah partisi yang ditetapkan ke satu broker harus tetap dalam sekitar 10% dari jumlah partisi rata-rata per broker. Cari anomali dalam metrik ini.
Untuk mempertahankan partisi yang seimbang, pertimbangkan untuk mengaktifkan penyeimbangan ulang otomatis saat penskalaan di cluster Anda.
Tabel berikut menunjukkan 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 bahwa workload Anda fault-tolerant. Dalam cluster yang responsif, 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 (ISR) minimum. Jika partisi memiliki ISR sinkron 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 kurang direplikasi. Partisi kurang direplikasi saat jumlah replika yang sinkron kurang dari faktor replikasi. Jika partisi tetap kurang direplikasi selama puluhan menit, mungkin ada masalah dengan broker, kapasitas penyimpanan, atau hal lain.
Selama memulai ulang bertahap, broker menjadi tidak tersedia saat dimulai ulang, sehingga menyebabkan kurangnya replikasi sementara. Situasi ini sudah diperkirakan dan tidak memerlukan intervensi.
Tabel berikut menunjukkan kueri PromQL yang dapat Anda gunakan untuk memantau replikasi.
| Sinyal | Kueri PromQL |
|---|---|
| Di bawah ISR 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}] ) ) |
| Dalam 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