Belajar Apache Kafka - Topics & Partitions Deep Dive
Episode 4 of 36

Belajar Apache Kafka - Topics & Partitions Deep Dive

Episode ini membedah topic dan partition secara mendalam: pembuatan topic, aturan penamaan, parameter konfigurasi, strategi partitioning berbasis key, round-robin, custom partitioner, hingga retention, segment, dan cleanup policy seperti delete dan compact.

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

Pendahuluan

Topic dan partition adalah unit penyimpanan dan paralelisme utama Kafka. Jika kalian salah menentukan jumlah partition atau strategi key, performa dan konsistensi aplikasi akan membayar harganya — dan memperbaikinya setelah produksi sangat menyakitkan.

Episode 4 ini akan membedah topic dari semua sisi: cara membuat, menamai, dan mengonfigurasinya; konsep partition dan distribusinya antar broker; strategi partitioning dengan key, round-robin, dan custom partitioner; serta parameter retention dan cleanup policy yang mengatur siklus hidup data.

Pahami episode ini dengan serius. Hampir setiap keputusan arsitektur Kafka — dari ordering, throughput, hingga biaya storage — berakar pada bagaimana kalian mendesain topic dan partition-nya.

Topic Fundamentals

Membuat Topic

Pembuatan topic dapat dilakukan secara eksplisit dengan CLI atau otomatis saat producer pertama kali mengirim ke topic yang belum ada (bila auto.create.topics.enable aktif). Untuk produksi, selalu buat eksplisit:

Membuat topic dengan parameter
bin/kafka-topics.sh --bootstrap-server localhost:9092 \
  --create --topic orders \
  --partitions 6 --replication-factor 3

Partition 6 memberi paralelisme, dan replication-factor 3 memberi toleransi dua broker mati. Hapus topic dengan flag --delete, dan lihat daftar seluruh topic dengan kafka-topics.sh --list.

Aturan Penamaan Topic

Nama topic adalah identitas yang dipakai klien dan alat otomatis, jadi patuhi konvensi: gunakan lowercase, pisahkan kata dengan tanda strip (-), dan hindari karakter khusus. Nama maksimal 249 karakter dan tidak boleh memakai . dan ... Penamaan yang baik menggambarkan domain dan jenis data, misalnya payment.events.completed dengan separator titik untuk hierarki, atau orders-v1 untuk versi skema.

Listing dan Describing

--list menampilkan nama saja; --describe menampilkan detail penting:

Deskripsi topic orders
bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic orders

Output menunjukkan per baris: partition, leader, replica, dan ISR. Leader harus tersebar merata, dan semua replica harus muncul di ISR untuk kondisi sehat.

Partition Concepts

Partition Count dan Distribusi

Jumlah partition menentukan batas paralelisme baca dan tulis: maksimal consumer aktif per group sama dengan jumlah partition, dan tulis terdistribusi merata jika tidak ada key. Aturan umum: mulai dari jumlah yang cukup untuk target throughput (misalnya 6-12), karena menambah partition bisa mengubah urutan dan menambah beban metadata.

Partition didistribusikan ke broker dengan mempertimbangkan rack awareness. Leader partition tersebar merata sehingga satu broker tidak menjadi hotspot.

Partition Key dan Message Ordering

Key menentukan partition tujuan. Record dengan key yang sama selalu menuju partition yang sama — selama jumlah partition tidak berubah — sehingga urutannya terjaga per key. Tanpa key, producer memakai round-robin (atau sticky batching) untuk distribusi merata.

Leader Election dan Preferred Leader

Saat broker leader mati, controller memilih follower baru dari ISR sebagai leader. Kafka mempertahankan preferred leader — broker yang seharusnya memimpin berdasarkan distribusi awal — dan melakukan --reassignment untuk mengembalikan keseimbangan setelah broker pulih:

Aktifkan preferred leader election
bin/kafka-leader-election.sh --bootstrap-server localhost:9092 \
  --topic orders --partition 0 --election-type preferred

Partitioning Strategies

Key-Based Partitioning

Strategi paling umum untuk menjaga urutan per entitas: gunakan ID entitas sebagai key.

Distribusi key ke partition
order-001 -> partition 2
order-001 -> partition 2  (urutan terjaga)
order-002 -> partition 0

Hitung partition key dengan murmur2(key) % numPartitions. Implikasinya: key yang tidak seimbang akan membuat partition panas (hot partition).

Round-Robin dan Custom Partitioner

Tanpa key, producer menyalurkan record secara round-robin atau dengan sticky batching: sekelompok record menempel pada satu partition dalam satu batch untuk memaksimalkan efisiensi, lalu pindah. Untuk kebutuhan khusus — misalnya menaruh record ke partition berdasarkan wilayah — kalian bisa menulis custom partitioner dengan mengimplementasikan interface Partitioner di Java dan menunjukkannya lewat partitioner.class:

Konfigurasi custom partitioner
partitioner.class=com.example.RegionPartitioner

Repartitioning Challenges

Menambah jumlah partition mengubah hasil hash key sehingga urutan lama bisa tercampur, dan operasi ini tidak dapat dibalik tanpa reassignment. Karena itu, desain jumlah partition sejak awal dengan menyisakan ruang pertumbuhan, dan jika harus menambah, pahami dampaknya terhadap ordering dan consumer.

Topic Configuration

Retention Time vs Size

Dua parameter utama yang mengatur berapa lama data bertahan:

Konfigurasi retention topic
retention.ms=604800000
retention.bytes=-1

retention.ms=604800000 (7 hari) atau retention.bytes membatasi berdasarkan ukuran. Nilai -1 berarti tanpa batas untuk parameter tersebut. Retention dihitung per partition.

Segment dan Cleanup Policies

Segmen dibatasi segment.ms dan segment.bytes; hanya segmen yang sudah tertutup yang dapat dihapus atau dikompresi. Cleanup policy diatur lewat cleanup.policy:

  • delete (default): segmen kedaluwarsa dihapus berdasarkan retention.
  • compact: nilai terbaru per key dipertahankan, histori lama dibuang.
  • compact,delete: menggabungkan keduanya.
Ubah cleanup policy ke compact
bin/kafka-configs.sh --bootstrap-server localhost:9092 \
  --alter --entity-type topics --entity-name orders \
  --add-config cleanup.policy=compact

Min In-Sync Replicas dan Compression

min.insync.replicas menentukan jumlah minimum replica yang harus menerima tulis agar partition dianggap sehat — dikombinasikan dengan acks=all pada producer untuk menjamin durability. compression.type menentukan codec compression broker untuk data yang dikompresi producer: producer (pakai setting producer), gzip, snappy, lz4, atau zstd. Ukuran besar data bisa disimpan lebih hemat dengan zstd, dengan trade-off CPU.

Tip

Kombinasi klasik untuk durability tinggi: min.insync.replicas=2 di broker dan acks=all di producer. Ini menjamin record dianggap sukses hanya jika direplikasi ke minimal dua replica.

Penutup

Di episode 4 ini kalian sudah menguasai topic dan partition dari A sampai Z: pembuatan dan penamaan topic, parameter konfigurasi, distribusi partition beserta leader election, strategi partitioning berbasis key, round-robin dan custom partitioner, hingga retention, segment, dan cleanup policy delete serta compact.

Inti yang harus dibawa pulang:

  • Partition adalah unit paralelisme dan ordering; ordering hanya per partition.
  • Jumlah partition menentukan batas paralelisme consumer group.
  • Key yang sama selalu menuju partition yang sama, menjaga urutan per key.
  • Repartitioning (menambah partition) mengubah hasil hash dan bisa memecah urutan.
  • Retention berbasis retention.ms dan retention.bytes; cleanup policy delete atau compact.
  • min.insync.replicas plus acks=all menjamin durability tinggi.

Di episode 5 selanjutnya kita akan menulis data ke Kafka: producers — dari konfigurasi dasar, API di Java, Python, Go, dan Node.js, pola pengiriman fire-and-forget, synchronous dan asynchronous, hingga tuning acks, retries, batching, compression, dan idempotent producer untuk exactly-once semantics. Bersiaplah untuk menulis kode pertama!