Episode ini membahas quota di Kafka: producer, consumer, request, dan controller mutation quota, konfigurasi di level user dan client-id, mekanisme throttling, monitoring metrik, serta penggunaan quota untuk multi-tenancy dan SLA.

Dalam cluster yang dipakai banyak tim, satu aplikasi yang rakus bisa menghabiskan seluruh bandwidth broker dan membuat aplikasi lain kelaparan — masalah yang dikenal sebagai noisy neighbor. Quota di Kafka menjawabnya dengan membatasi berapa banyak resource yang boleh dipakai setiap user atau client-id.
Episode 19 ini akan membahas jenis-jenis quota — producer, consumer, request, dan controller mutation — cara mengonfigurasinya di level user, client-id, atau kombinasi keduanya, mekanisme throttling di balik layar, serta penggunaan quota untuk multi-tenancy, cost control, dan SLA.
Dua quota utama mengatur throughput data dalam byte per detik:
Quota diterapkan per user (prinsipal autentikasi), per client-id, atau kombinasi user+client-id. Kombinasi paling spesifik yang menang:
bin/kafka-configs.sh --bootstrap-server localhost:9093 \
--alter --add-config 'producer_byte_rate=10485760,consumer_byte_rate=10485760' \
--entity-type users --entity-name app-producerkafka-configs.sh --alter --entity-type users menetapkan quota 10 MB/s untuk tulis dan baca prinsipal app-producer. Quota dikonfigurasi per user atau per client-id, dan dipakai sebagai default jika prinsipal tidak punya aturan sendiri.
bin/kafka-configs.sh --bootstrap-server localhost:9093 \
--alter --add-config 'producer_byte_rate=5242880' \
--entity-type users --entity-name app-producer \
--entity-type clients --entity-name analytics-batch
bin/kafka-configs.sh --bootstrap-server localhost:9093 \
--alter --add-config 'producer_byte_rate=20971520,consumer_byte_rate=20971520' \
--entity-type clients --entity-name default--entity-type clients --entity-name default menetapkan default untuk semua client-id tanpa aturan eksplisit. Quota user+client-id paling spesifik berlaku untuk kombinasi tertentu, mengalahkan quota per user atau per client-id.
Quota bisa diubah kapan pun tanpa restart — perubahan diterapkan secara dinamis oleh broker. Ini berguna untuk merespons lonjakan beban: naikkan sementara quota satu tim, lalu kembalikan setelah selesai. kafka-configs.sh --alter yang sama dipakai untuk menyesuaikan nilai seketika.
Untuk menghapus quota khusus dan kembali ke default, gunakan --delete-config:
bin/kafka-configs.sh --bootstrap-server localhost:9093 \
--alter --delete-config 'producer_byte_rate' \
--entity-type users --entity-name app-producerkafka-configs.sh --alter --delete-config menghapus aturan khusus sehingga prinsipal kembali memakai default. Selalu verifikasi hasil dengan --describe untuk memastikan nilai yang diinginkan benar-benar berlaku.
Broker melacak penggunaan per koneksi dan menghitung nilai maksimum yang diizinkan berdasarkan window metrics terbaru. Ketika penggunaan melebihi quota, broker menambahkan delay (throttle time) pada response sehingga klien tidak bisa mengirim lebih cepat dari yang diizinkan. Klien librdkafka dan librari modern memahami throttling ini dan menyesuaikan kecepatan.
Penting untuk memantau dampak quota:
Throttling bersifat responsif: ketika klien melambat dan pemakaian turun di bawah quota, throttle berhenti. Karena itu quota bukan hard limit instan — ini pengatur laju rata-rata yang mulus, bukan pemutus koneksi. Aplikasi yang sehat cukup menaikkan batas internalnya; aplikasi bermasalah tetap bisa "membanjiri" sesaat sebelum throttle aktif.
Quota adalah alat utama untuk isolasi resource dalam cluster multi-tenant. Setiap tim mendapat batas tulis dan baca; satu tim yang membanjiri tidak bisa menurunkan SLA tim lain. Kombinasikan dengan ACL (episode 17) untuk kontrol penuh: ACL menentukan boleh apa, quota menentukan seberapa banyak.
Tip
Mulai dari default quota yang moderat untuk seluruh cluster, lalu beri pengecualian naik untuk aplikasi yang memang butuh throughput tinggi. Jauh lebih mudah menaikkan quota satu aplikasi daripada membatasi aplikasi lain yang sudah terlanjur rakus.
Di episode 19 ini kalian sudah memahami jenis quota, konfigurasi di level user dan client-id, mekanisme throttling berbasis delay, serta penggunaan quota untuk multi-tenancy, cost control, dan SLA.
Inti yang harus dibawa pulang:
Di episode 20 selanjutnya kita akan menskalakan cluster: scaling Kafka clusters. Kalian akan belajar menambah broker, partition reassignment, capacity planning, dan pengenalan Cruise Control untuk rebalancing otomatis dan self-healing.