Belajar Apache Kafka - Konsep Dasar & Arsitektur Apache Kafka
Episode 2 of 36

Belajar Apache Kafka - Konsep Dasar & Arsitektur Apache Kafka

Episode ini membedah konsep inti Kafka: event, topic, partition, broker, cluster, offset, dan consumer group. Kalian juga akan memahami arsitektur distributed commit log, peran controller broker, mekanisme replikasi, serta storage berbasis log segment.

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

Pendahuluan

Setelah memahami mengapa Kafka ada, sekarang waktunya memahami apa itu Kafka secara struktural. Episode 2 ini adalah fondasi konseptual paling penting di seluruh series: jika kalian paham event, topic, partition, offset, dan consumer group, semua episode berikutnya tinggal memperdalam detail dari konsep yang sama.

Kafka didesain sebagai distributed commit log. Artinya, data tersimpan sebagai urutan record yang di-append ke dalam log, didistribusikan di banyak node, dan direplikasi agar tahan terhadap kegagalan. Paradigma ini berbeda jauh dari database relasional yang mengorganisir data dalam tabel yang bisa di-update in-place.

Kita akan membedah struktur event, bagaimana log dipecah menjadi partition, bagaimana replicas menjaga ketersediaan, peran controller broker dalam KRaft, serta format penyimpanan berbasis segment file. Pahami dengan sungguh-sungguh, karena semua istilah ini akan dipakai berulang kali di 33 episode berikutnya.

Core Concepts Kafka

Event (Record)

Unit dasar Kafka disebut event atau record. Sebuah event adalah fakta yang terjadi di dunia: "user A mengklik tombol checkout pada pukul 10:00". Secara internal, sebuah record berisi:

  • Key: opsional, dipakai untuk menentukan partition dan menjaga urutan per key.
  • Value: payload utama event, berupa byte hasil serialisasi.
  • Timestamp: waktu event diproduksi atau disimpan.
  • Headers: metadata opsional berbentuk key-value.
  • Offset: posisi record dalam partition, diberikan otomatis oleh broker.

Event bersifat immutable — sekali ditulis, tidak bisa diubah. Update hanyalah menulis event baru.

Topic dan Partition

Sebuah topic adalah kategori tempat event dipublikasikan, misalnya orders atau user-events. Topic dipecah menjadi satu atau lebih partition. Setiap partition adalah log terurut yang di-append secara berurutan:

Log partition yang terurut
[0] [1] [2] [3] [4] ...  <- offset

Partition memberikan paralelisme: producer dapat menulis ke beberapa partition bersamaan, dan consumer group dapat membaca partition yang berbeda secara paralel. Kunci penting: ordering hanya dijamin di dalam satu partition, bukan antar partition.

Producer, Consumer, Broker, dan Cluster

Producer adalah aplikasi yang menulis event ke topic. Consumer adalah aplikasi yang membaca event dari topic. Keduanya berbicara dengan broker — server Kafka yang menyimpan dan melayani data. Beberapa broker bersama-sama membentuk cluster; setiap broker mengelola beberapa partition dari berbagai topic.

Arsitektur Kafka

Distributed Commit Log dan Partition Leadership

Setiap partition direplikasi ke beberapa broker. Satu broker menjadi leader untuk partition tersebut; sisanya adalah follower. Semua tulis dan baca dilakukan melalui leader, sementara follower mereplikasi data secara asinkron. Jika leader mati, salah satu follower terpilih menjadi leader baru.

Setiap partition juga mempertahankan daftar ISR (In-Sync Replicas) — follower yang masih sinkron dengan leader. Replica yang tertinggal dikeluarkan dari ISR, dan masuk kembali ketika sudah mengejar ketertinggalan.

Controller Broker dan Metadata Management

Kafka modern memakai KRaft (KIP-500): metadata cluster — daftar broker, topic, partition, leader — dikelola oleh sebuah quorum dari controller broker memakai algoritma Raft. Satu controller aktif memimpin, sisanya standby. Ini menggantikan peran ZooKeeper pada Kafka versi lama.

Controller bertugas memutuskan leader election, memproses pembuatan topic, dan mengoordinasikan reassignment partition. Jika controller aktif gagal, quorum memilih controller baru secara otomatis.

Write Path dan Read Path

Ketika producer mengirim record, broker menulisnya ke log partition milik leader, lalu menunggu konfirmasi follower sesuai setting acks=all pada sisi producer. Consumer membaca dari offset terakhir yang direkam di consumer group, dan broker mengembalikan batch record berikutnya. Proses baca memanfaatkan zero-copy sehingga data tidak perlu disalin berulang antara kernel dan aplikasi.

Storage Architecture

Log-Structured Storage dan Segment Files

Setiap partition disimpan sebagai direktori berisi rangkaian segment files. Segmen adalah file .log berisi record aktual, dengan indeks .index (offset ke posisi byte) dan .timeindex (timestamp ke offset). Segmen yang tertutup (tidak aktif lagi) menjadi target untuk retention dan compaction:

Struktur direktori partition
ls /tmp/kraft-combined-logs/orders-0/
00000000000000000000.log
00000000000000000000.index
00000000000000000000.timeindex

Nama file adalah offset record pertama di segmen tersebut. Broker menulis ke segmen aktif sampai ukuran segmen tercapai atau waktu segmen terlewati, lalu membuat segmen baru.

Retention Policies dan Log Compaction

Retention menentukan berapa lama data disimpan. Dua mode yang didukung: delete, yang menghapus segmen lebih tua dari retention.ms atau melebihi retention.bytes, dan compact, yang menyimpan hanya nilai terbaru untuk setiap key (detail lengkap di episode 10). Mode default Kafka adalah delete.

Info

Karena Kafka menulis secara sekuensial ke disk, I/O jauh lebih efisien daripada update random. Inilah salah satu alasan Kafka mencapai throughput jutaan record per detik bahkan di atas hard disk biasa.

Konsep Offset dan Consumer Group

Offset sebagai Posisi Baca

Setiap record dalam partition memiliki offset unik, yang menandakan posisinya dalam log. Consumer yang menyimpan offset terakhir yang sudah diproses dapat melanjutkan dari posisi tersebut setelah restart — ini yang memungkinkan replay dan resume tanpa kehilangan data.

Consumer Group untuk Paralelisme

Sekumpulan consumer yang berbagi group.id membentuk consumer group. Partisi sebuah topic dibagi rata di antara anggota group: jika ada 6 partition dan 3 consumer, setiap consumer mendapat 2 partition. Jika satu consumer mati, partition-nya di-assign ulang ke anggota lain — proses ini disebut rebalance.

Pembagian partition ke consumer group
Topic orders (6 partition)
consumer A -> partition 0,1
consumer B -> partition 2,3
consumer C -> partition 4,5

Jumlah consumer tidak boleh melebihi jumlah partition, karena satu partition hanya boleh dibaca satu consumer dalam satu group pada satu waktu. Detail pengelolaan offset dan strategi assignment akan dibahas di episode 6.

Penutup

Di episode 2 ini kalian sudah membangun peta konseptual Kafka: event sebagai record immutable, topic yang dipecah menjadi partition terurut, broker dan cluster dengan leader-follower replication, controller KRaft untuk metadata, storage berbasis segment file, serta offset dan consumer group sebagai mekanisme konsumsi paralel.

Inti yang harus dibawa pulang:

  • Kafka adalah distributed commit log: record di-append, bukan di-update.
  • Ordering hanya dijamin per partition, dengan offset sebagai posisi unik setiap record.
  • Setiap partition punya leader dan ISR; leader melayani semua tulis dan baca.
  • Controller broker (KRaft) mengelola metadata dan leader election tanpa ZooKeeper.
  • Storage berbasis segment file: .log, .index, .timeindex.
  • Consumer group membagi partition di antara anggotanya untuk paralelisme.

Di episode 3 selanjutnya kita akan mempraktikkan konsep ini: installation dan cluster setup — dari binary installation, perbandingan ZooKeeper vs KRaft, membangun single-node dan multi-broker cluster, hingga mengenal seluruh Kafka CLI tools yang akan menemani kalian sepanjang series. Siapkan terminal kalian, karena hands-on dimulai sekarang!