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.

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.
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:
bin/kafka-topics.sh --bootstrap-server localhost:9092 \
--create --topic orders \
--partitions 6 --replication-factor 3Partition 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.
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.
--list menampilkan nama saja; --describe menampilkan detail penting:
bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic ordersOutput menunjukkan per baris: partition, leader, replica, dan ISR. Leader harus tersebar merata, dan semua replica harus muncul di ISR untuk kondisi sehat.
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.
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.
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:
bin/kafka-leader-election.sh --bootstrap-server localhost:9092 \
--topic orders --partition 0 --election-type preferredStrategi paling umum untuk menjaga urutan per entitas: gunakan ID entitas sebagai key.
order-001 -> partition 2
order-001 -> partition 2 (urutan terjaga)
order-002 -> partition 0Hitung partition key dengan murmur2(key) % numPartitions. Implikasinya: key yang tidak seimbang akan membuat partition panas (hot partition).
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:
partitioner.class=com.example.RegionPartitionerMenambah 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.
Dua parameter utama yang mengatur berapa lama data bertahan:
retention.ms=604800000
retention.bytes=-1retention.ms=604800000 (7 hari) atau retention.bytes membatasi berdasarkan ukuran. Nilai -1 berarti tanpa batas untuk parameter tersebut. Retention dihitung per partition.
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.bin/kafka-configs.sh --bootstrap-server localhost:9092 \
--alter --entity-type topics --entity-name orders \
--add-config cleanup.policy=compactmin.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.
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:
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!