Apa yang Berubah
Selama satu dekade Kafka menyimpan metadata klaster — daftar topik, konfigurasi, keanggotaan broker, ACL — di ZooKeeper, sistem terpisah yang harus dijalankan dan dipelihara sendiri.
KRaft (Kafka Raft) memindahkan metadata itu ke dalam Kafka sendiri, disimpan pada topik internal __cluster_metadata dan direplikasi memakai protokol konsensus Raft.
DULU (Kafka 2.x/3.x mode lama) SEKARANG (KRaft)
┌────────────┐ ┌────────────────────┐
│ ZooKeeper │ ← 3 node terpisah │ Kafka controller │
└─────┬──────┘ │ quorum (3 node) │
│ └─────────┬──────────┘
┌─────┴──────┐ │
│ Broker │ ┌─────┴──────┐
└────────────┘ │ Broker │
└────────────┘
Dua sistem, dua model operasi Satu sistem, satu biner
Mode ZooKeeper sudah dihapus di Kafka 4.0 — bukan sekadar deprecated. Perintah lama seperti --zookeeper localhost:2181 pada kafka-topics.sh juga sudah lama hilang; semuanya kini memakai --bootstrap-server. Bila panduan yang Anda ikuti menjalankan zookeeper-server-start.sh, panduan itu sudah usang.
Peran Baru: Controller dan Broker
Pada KRaft, tiap node punya process.roles:
| Peran | Tugas | Dipakai kapan |
|---|---|---|
controller | Anggota quorum metadata, memilih leader partisi | Produksi: 3 node khusus |
broker | Menyimpan dan melayani data topik | Produksi: sebanyak yang dibutuhkan |
broker,controller | Keduanya sekaligus (mode gabungan) | Pengembangan lokal, klaster kecil |
Konfigurasi Minimal KRaft
process.roles=broker,controller node.id=1 controller.quorum.voters=1@host1:9093,2@host2:9093,3@host3:9093 listeners=PLAINTEXT://:9092,CONTROLLER://:9093 inter.broker.listener.name=PLAINTEXT controller.listener.names=CONTROLLER log.dirs=/var/lib/kafka/data
Sebelum broker pertama kali dijalankan, direktori penyimpanan harus diformat dengan sebuah cluster id:
KAFKA_CLUSTER_ID=$(kafka-storage.sh random-uuid) kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c server.properties
Jalankan random-uuid sekali saja, lalu pakai nilai itu untuk memformat setiap node. Memformat tiap node dengan id berbeda menghasilkan node yang menolak bergabung, dengan pesan galat yang tidak langsung menunjuk penyebabnya.
Kenapa Ini Lebih Baik
- Satu sistem untuk dioperasikan — satu biner, satu model keamanan, satu tempat memantau.
- Pemulihan controller jauh lebih cepat — metadata sudah ada di memori tiap controller, tidak perlu dimuat ulang dari ZooKeeper.
- Skala partisi jauh lebih besar — jutaan partisi per klaster menjadi realistis.
- Startup lebih ringkas — penting untuk klaster di Kubernetes yang sering dijadwal ulang.
Kafka modern bisa dijalankan sebagai satu kontainer tunggal tanpa ZooKeeper. Image apache/kafka resmi sudah memakai KRaft secara default dan siap pakai untuk pengembangan hanya dengan menyetel beberapa variabel lingkungan.