Belajar Apache Kafka - Quotas & Rate Limiting
Episode 19 of 36

Belajar Apache Kafka - Quotas & Rate Limiting

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.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

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.

Jenis Quota

Producer dan Consumer Quota

Dua quota utama mengatur throughput data dalam byte per detik:

  • Producer quota: membatasi laju tulis (bytes/sec) dari producer. Melindungi broker dari ledakan tulis dan menjaga konsumsi disk serta jaringan.
  • Consumer quota: membatasi laju baca (bytes/sec) dari consumer. Mencegah satu consumer menarik data terlalu cepat dan menghambat klien lain.

Request dan Controller Mutation Quota

  • Request quota: membatasi persentase waktu pemrosesan broker yang dipakai sebuah client-id — menghentikan klien yang membanjiri broker dengan request metadata atau API kecil.
  • Controller mutation quota: membatasi operasi yang mengubah metadata cluster (membuat/menghapus topic, reassignment) agar satu user tidak bisa membanjiri controller.

Konfigurasi Quota

Level User dan Client-id

Quota diterapkan per user (prinsipal autentikasi), per client-id, atau kombinasi user+client-id. Kombinasi paling spesifik yang menang:

Set quota user
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-producer

kafka-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.

User + Client-id dan Default

Quota kombinasi user dan client-id
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.

Dynamic Quota Updates

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:

Hapus quota khusus
bin/kafka-configs.sh --bootstrap-server localhost:9093 \
  --alter --delete-config 'producer_byte_rate' \
  --entity-type users --entity-name app-producer

kafka-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.

Mekanisme Throttling

Bagaimana Broker Menegakkan Quota

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.

Metrik Monitoring

Penting untuk memantau dampak quota:

  • throttle-time: berapa banyak waktu tambahan yang dikenakan per request akibat quota. Nilai tinggi menandakan klien mendekati batas.
  • produce-throttle-time / fetch-throttle-time: breakdown throttle untuk tulis dan baca.
  • Pantau juga request-rate dan bytes-out/in per client untuk mengidentifikasi klien yang mendekati limit.

Dynamic Behavior

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.

Use Case Quota

Multi-Tenancy dan Noisy Neighbor

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.

Cost Control dan SLA

  • Cost control: quota mencegah klien tak terkendali yang memboroskan bandwidth dan storage — penting saat biaya ditagih per penggunaan atau dalam deployment cloud.
  • SLA enforcement: quota menjamin kapasitas broker tidak habis direbut satu aplikasi, sehingga latensi p95 tetap terjaga untuk semua klien.

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.

Penutup

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:

  • Producer dan consumer quota membatasi throughput dalam bytes/sec.
  • Request dan controller mutation quota membatasi beban pemrosesan broker.
  • Quota bisa diatur per user, per client-id, atau kombinasi keduanya.
  • Default quota melindungi seluruh cluster dari klien tanpa aturan.
  • Broker menegakkan quota dengan menambahkan throttle time, bukan memutus koneksi.
  • Kombinasikan quota dengan ACL untuk isolasi multi-tenant penuh.

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.

Belajar Apache Kafka - Quotas & Rate Limiting | Belajar Apache Kafka