Episode ini membahas tuning performa Kafka: optimasi producer dengan batch, compression, dan acks, tuning consumer pada fetch dan poll, optimasi broker pada JVM, OS, dan disk I/O, serta konfigurasi topic untuk throughput dan latensi.

Kafka mampu menangani jutaan record per detik, tetapi performa itu tidak muncul otomatis — ia adalah hasil dari konfigurasi yang disesuaikan dengan workload. Broker, producer, consumer, dan topic masing-masing punya parameter yang saling memengaruhi, dan perubahan di satu sisi sering berdampak di sisi lain.
Episode 21 ini akan membahas tuning dari empat sudut: producer, consumer, broker (termasuk JVM dan OS), serta konfigurasi topic. Kalian akan memahami trade-off throughput versus latensi dan cara menyetel parameter yang paling berdampak untuk workload kalian.
Parameter paling berpengaruh pada throughput producer:
batch.size=131072
linger.ms=20
compression.type=zstd
acks=allbatch.size=131072 memperbesar ukuran batch menjadi 128KB dan linger.ms=20 menahan record 20ms untuk menggabungkan tulis — ini meningkatkan throughput secara dramatis. compression.type=zstd mengurangi byte yang dikirim: zstd memberi rasio terbaik, snappy dan lz4 menawarkan keseimbangan CPU.
acks=all memberi durability terbaik; trade-off-nya menunggu konfirmasi semua ISR. max.in.flight.requests.per.connection mengatur berapa banyak request yang dikirim tanpa menunggu — dengan idempotence aktif, nilai 5 aman tanpa reordering. Untuk latensi terendah, linger.ms=0 dan batch kecil, tetapi throughput turun.
Consumer yang lambat sering bukan karena kode, melainkan konfigurasi fetch yang kecil:
fetch.min.bytes=1048576
fetch.max.wait.ms=500
max.poll.records=500fetch.min.bytes=1048576 membuat broker menunggu hingga 1MB terkumpul sebelum merespons — mengurangi jumlah round-trip dan menaikkan throughput. max.poll.records membatasi jumlah record per poll agar pemrosesan tidak melebihi max.poll.interval.ms.
Strategi assignment menentukan bagaimana partition dibagi antar consumer:
Pilih CooperativeStickyAssignor untuk rebalance yang lebih mulus pada consumer group besar.
Broker adalah aplikasi JVM. Dua hal yang paling berdampak:
kafka.server:type=KafkaRequestHandlerPool. Pastikan data baca melalui page cache, bukan heap.sysctl -w vm.swappiness=1
sysctl -w vm.dirty_ratio=60
sysctl -w vm.dirty_background_ratio=5
sysctl -w net.core.wmem_max=209715200
sysctl -w net.core.rmem_max=209715200vm.swappiness=1 mengurangi penggunaan swap yang bisa menyebabkan GC pause besar, dan net.core.wmem_max memperbesar buffer soket jaringan. File descriptor limit (ulimit -n) harus cukup tinggi karena setiap koneksi klien memakai satu fd.
Kafka menulis sekuensial, jadi:
segment.bytes=1073741824
segment.ms=604800000
retention.ms=604800000
log.flush.interval.messages=100000segment.bytes=1073741824 (1GB) mengurangi jumlah segmen kecil yang memperbanyak operasi index; log.flush.interval.messages menunda flush ke disk — dengan replikasi sebagai jaminan durability, flush jarang justru mempercepat tulis.
Pastikan message.format.version sejajar dengan versi broker untuk performa terbaik. Compression codec konsisten antara producer dan broker menghindari re-compress yang membuang CPU. Pemantauan terus-menerus diperlukan: tuning yang benar di satu workload belum tentu benar di workload lain.
Tip
Ukur sebelum menyetel. Catat throughput dan latensi baseline dengan kafka-producer-perf-test (episode 32), ubah satu parameter, ukur lagi. Mengubah banyak parameter sekaligus membuat kalian tidak tahu mana yang bekerja.
Di episode 21 ini kalian sudah memahami tuning producer dengan batching, compression, dan acks, tuning consumer dengan fetch size dan assignment strategy, optimasi broker pada JVM, OS, dan page cache, serta konfigurasi topic untuk throughput dan latensi.
Inti yang harus dibawa pulang:
batch.size dan linger.ms adalah pengungkit throughput terbesar.CooperativeStickyAssignor menstabilkan rebalance pada group besar.Di episode 22 selanjutnya kita akan memantau cluster: monitoring dan observability. Kalian akan belajar metrik JMX, metrik kunci seperti under-replicated partition dan consumer lag, integrasi Prometheus dan Grafana, serta tool seperti Burrow untuk monitoring lag.