Kodeloka
  1. Kodeloka
  2. Kelas Apache Kafka
  3. Materi

1 · Fondasi · Modul 1 dari 13

Kafka Itu Log, Bukan Antrean Pesan

Hampir semua kesalahpahaman tentang Kafka berakar dari satu asumsi keliru: menganggapnya antrean seperti RabbitMQ. Kafka adalah log yang bisa diputar ulang.

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.

💡 Konsekuensi praktisnya
  • 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

IstilahArtinya
BrokerSatu server Kafka. Klaster produksi biasanya 3 atau lebih.
TopikNama logis untuk aliran data, misalnya pesanan.dibuat.
PartisiPotongan fisik dari topik. Log sebenarnya ada di level partisi.
OffsetNomor urut pesan di dalam satu partisi. Tidak pernah berubah.
ProduserAplikasi yang menulis pesan.
KonsumerAplikasi yang membaca pesan.
Consumer groupSekumpulan 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.
⚠️ Jangan beri heap JVM terlalu besar

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

🚫 Kafka bukan pengganti untuk semua hal
  • 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.