Perbedaan yang Menentukan Segalanya
Pada antrean pesan tradisional, pesan yang sudah dikonsumsi akan hilang. Broker menyimpan status "siapa sudah mengambil apa", dan setelah semua konsumen menerima, pesan dibuang.
Kafka bekerja terbalik. Kafka menulis setiap pesan ke log append-only di disk, dan menyimpannya sampai kebijakan retensi menghapusnya — apakah ada yang membacanya atau tidak. Yang dilacak bukan pesan, melainkan posisi baca tiap konsumen.
Partisi 0:
offset: 0 1 2 3 4 5 6 7 8
[ A ][ B ][ C ][ D ][ E ][ F ][ G ][ H ][ I ] ← tulis di sini
▲ ▲
grup-analitik grup-notifikasi
(offset 3) (offset 6)
Dua grup konsumen membaca log yang sama pada kecepatan berbeda tanpa saling mengganggu. Menambah konsumen baru bulan depan tetap bisa membaca data bulan lalu — selama masih dalam masa retensi.
- Memutar ulang data itu normal: reset offset ke nol dan proses ulang seluruh riwayat setelah memperbaiki bug.
- Satu sumber, banyak pemakai: tim analitik, layanan notifikasi, dan gudang data membaca topik yang sama tanpa duplikasi data.
- Konsumen lambat tidak merusak sistem, hanya tertinggal — dan lag itu terukur.
Anatomi Klaster
| Istilah | Artinya |
|---|---|
| Broker | Satu server Kafka. Klaster produksi biasanya 3 atau lebih. |
| Topik | Nama logis untuk aliran data, misalnya pesanan.dibuat. |
| Partisi | Potongan fisik dari topik. Log sebenarnya ada di level partisi. |
| Offset | Nomor urut pesan di dalam satu partisi. Tidak pernah berubah. |
| Produser | Aplikasi yang menulis pesan. |
| Konsumer | Aplikasi yang membaca pesan. |
| Consumer group | Sekumpulan konsumen yang berbagi beban satu topik. |
Kenapa Kafka Cepat
Kafka menulis ke disk, tetapi tetap mampu menangani jutaan pesan per detik. Rahasianya bukan sihir, melainkan tiga hal:
- Penulisan berurutan. Append ke akhir berkas jauh lebih cepat daripada penulisan acak — bahkan pada SSD, dan sangat dramatis pada HDD.
- Page cache sistem operasi. Kafka sengaja tidak membangun cache sendiri di dalam JVM; ia menyerahkannya pada page cache kernel. Konsumen yang membaca data baru hampir selalu dilayani dari memori.
- Batching dan kompresi. Produser mengumpulkan pesan menjadi batch, mengompresnya sekali, dan broker menyimpan batch itu apa adanya tanpa membongkarnya.
Godaan umum: server 64 GB, lalu heap Kafka disetel 32 GB. Ini justru memperlambat, karena memori yang seharusnya dipakai page cache jadi berkurang dan jeda garbage collection memanjang. Praktik yang lazim adalah heap 6–12 GB, sisanya biarkan menjadi page cache.
Kapan Kafka Bukan Jawabannya
- Antrean tugas dengan prioritas dan retry per pesan — Kafka tidak punya prioritas pesan maupun redelivery selektif. RabbitMQ atau SQS lebih cocok.
- Request/response sinkron — pakai HTTP atau gRPC.
- Basis data — Kafka tidak bisa melakukan kueri sembarang. Log compaction bukan pengganti tabel.
- Sistem kecil dengan lalu lintas rendah — biaya operasional klaster Kafka sering jauh melebihi manfaatnya bila hanya ada beberapa ribu pesan per hari.