Episode ini memandu instalasi Kafka dengan binary, Docker, dan cloud managed service. Kalian akan memahami perbedaan ZooKeeper dan KRaft mode, membangun single-node serta multi-broker cluster, dan menguasai CLI tools untuk mengelola cluster.

Sekarang tibalah bagian hands-on pertama. Di episode 0 kalian sudah menjalankan broker KRaft standalone; episode 3 ini akan memperluas itu menjadi pemahaman utuh tentang cara instalasi, perbedaan ZooKeeper vs KRaft, dan pembangunan cluster multi-broker yang realistis.
Kalian akan melihat tiga jalur instalasi: binary (TAR/ZIP) untuk kontrol penuh, Docker untuk reproduksibilitas, dan cloud managed untuk produksi tanpa operasional. Yang terpenting, kalian akan membangun cluster multi-broker dan memverifikasi kesehatannya dengan CLI tools resmi.
Sebelum melangkah, penting memahami pilihan ZooKeeper vs KRaft. Ini keputusan arsitektur yang memengaruhi konfigurasi cluster kalian, dan KRaft adalah masa depan Kafka. Episode ini akan menuntun kalian melewati keduanya dengan praktik yang benar.
Metode paling mendasar adalah mengekstrak archive resmi Apache:
curl -O https://downloads.apache.org/kafka/3.7.1/kafka_2.13-3.7.1.tgz
tar -xzf kafka_2.13-3.7.1.tgz
cd kafka_2.13-3.7.1Di dalamnya terdapat bin/ untuk skrip shell, config/ untuk file konfigurasi, dan libs/ berisi semua JAR. Metode ini memberi kontrol penuh dan cocok untuk belajar atau men-debug.
Untuk reproduksibilitas dan pengujian cepat, Docker adalah pilihan terbaik. Ekosistem resmi tersedia di apache/kafka untuk image sederhana, atau confluentinc/cp-kafka untuk image Confluent dengan tooling lengkap. Kita akan membahas Docker secara mendalam di episode 29; untuk sekarang, ketahui bahwa menjalankan Kafka via container hanya butuh beberapa environment variable.
Untuk produksi tanpa operasional, gunakan Confluent Cloud, AWS MSK, Azure Event Hubs, atau Aiven. Layanan ini menangani upgrade, replikasi, dan monitoring. Episode 30 akan membahasnya secara detail; di sini kalian cukup tahu bahwa semuanya tetap menggunakan protokol Kafka sehingga kode klien yang sama tetap berlaku.
Sebelum Kafka 3.x, metadata cluster disimpan di ZooKeeper: siapa broker yang hidup, siapa leader setiap partition, dan daftar topic. ZooKeeper adalah sistem konsensus terpisah yang menambah komponen ekstra untuk dioperasikan, dan menjadi sumber kegagalan serta hambatan skalabilitas saat cluster membesar.
KRaft menghapus ZooKeeper: metadata dikelola oleh quorum controller yang memakai algoritma Raft. Manfaatnya: deployment lebih sederhana, metadata dapat di-scale, startup cluster lebih cepat, dan failure lebih mudah ditangani. KRaft sudah production-ready sejak Kafka 3.3 dan menjadi mode default pada Kafka 4.x.
Migrasi cluster ZooKeeper yang sedang berjalan dapat dilakukan dengan kafka-storage.sh dengan flag khusus:
KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID \
-c config/kraft/server.propertiesUntuk cluster baru, selalu langsung gunakan KRaft. Untuk cluster lama, gunakan mode mixed (ZooKeeper + KRaft) pada rilis 3.x sebagai jembatan, lalu pindah penuh. Seluruh series ini memakai KRaft.
Warning
KRaft tidak mendukung downgrade: setelah format ulang dengan KRaft, jangan berharap bisa kembali memakai ZooKeeper tanpa memigrasikan ulang data. Pahami rencana upgrade kalian sebelum eksekusi.
Konfigurasi standalone paling sederhana disediakan di config/kraft/reconfig-server.properties. Intinya, setiap broker butuh node.id, process.roles, listeners, dan log.dirs:
process.roles=broker,controller
node.id=1
controller.quorum.voters=1@localhost:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://localhost:9092
log.dirs=/tmp/kraft-combined-logsSatu node berperan sebagai broker sekaligus controller. Jalankan dengan bin/kafka-server-start.sh config/kraft/reconfig-server.properties.
Untuk mempelajari replikasi, bangun tiga broker. Buat tiga file konfigurasi dengan node.id berbeda, port listener berbeda, dan log.dirs berbeda:
bin/kafka-server-start.sh config/kraft/server-1.properties &
bin/kafka-server-start.sh config/kraft/server-2.properties &
bin/kafka-server-start.sh config/kraft/server-3.properties &Setiap file memakai controller.quorum.voters=1@localhost:9093,2@localhost:9094,3@localhost:9095, dengan satu node bertindak sebagai controller aktif dan dua lainnya standby. Pastikan semua menggunakan KAFKA_CLUSTER_ID yang sama hasil format.
Gunakan CLI untuk memastikan semua broker terdaftar:
bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092Perintah ini menampilkan versi API yang didukung setiap broker. Jika muncul tiga broker, cluster kalian sehat. Untuk daftar ringkas, kafka-metadata.sh --snapshot --cluster-id ... menampilkan snapshot metadata KRaft.
Berikut CLI yang akan menemani kalian sepanjang series:
kafka-topics.sh — membuat, mendeskripsikan, dan menghapus topic.kafka-console-producer.sh — mengirim record dari stdin untuk pengujian.kafka-console-consumer.sh — membaca record ke stdout untuk pengujian.kafka-broker-api-versions.sh — memeriksa versi API broker.kafka-cluster.sh — mengelola cluster KRaft, termasuk format dan metadata.kafka-configs.sh — mengubah konfigurasi broker, topic, dan user.kafka-consumer-groups.sh — mengelola consumer group dan offset.kafka-acls.sh — mengelola authorization (dibahas di episode 17).Coba jalankan yang paling sering dipakai untuk menguji klaster:
bin/kafka-topics.sh --bootstrap-server localhost:9092 \
--create --topic test --partitions 3 --replication-factor 3
bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic testPerintah --describe menampilkan distribusi partition dan leader di antara broker. Output yang sehat menunjukkan semua replica berstatus Isr lengkap dan leader tersebar.
Di episode 3 ini kalian sudah membangun cluster Kafka pertama secara utuh: memahami tiga jalur instalasi, membedakan ZooKeeper dan KRaft, menjalankan single-node serta multi-broker cluster, memverifikasi kesehatan dengan CLI, dan mengenal tool yang akan dipakai terus-menerus.
Inti yang harus dibawa pulang:
controller.quorum.voters dengan satu node sebagai controller aktif.kafka-broker-api-versions.sh dan kafka-topics.sh --describe adalah gerbang verifikasi kesehatan.kafka-storage.sh format sebelum memulai broker.Di episode 4 selanjutnya kita akan mendalami topics dan partitions — aturan penamaan topic, parameter konfigurasi, strategi partitioning berbasis key, round-robin, custom partitioner, hingga retention dan cleanup policy. Cluster tiga broker yang barusan kalian bangun akan menjadi laboratoriumnya!