Scroll untuk baca artikel
KafkaMessage Broker

Setup Apache Kafka modern tanpa Zookeeper menggunakan Docker Compose

175
×

Setup Apache Kafka modern tanpa Zookeeper menggunakan Docker Compose

Sebarkan artikel ini

Setup Apache Kafka modern tanpa Zookeeper menggunakan Docker Compose

kafka logo
kafka logo
61 / 100 Skor SEO

Pendahuluan

Dalam arsitektur sistem modern, data bergerak dengan sangat cepat. Mulai dari event sensor IoT, log aplikasi, hingga transaksi keuangan — semua membutuhkan sistem yang mampu mengalirkan data secara real-time.

Nah, di sinilah Apache Kafka berperan.

Kafka adalah event streaming platform yang didesain untuk mengirim, menerima, menyimpan, dan memproses data dengan kecepatan tinggi serta keandalan tinggi. Kafka banyak digunakan oleh perusahaan besar seperti LinkedIn, Uber, dan Netflix untuk menangani miliaran event per hari.

Sebelumnya, Kafka sangat bergantung pada Zookeeper sebagai komponen koordinasi cluster. Namun sejak versi 3.x, Kafka telah beralih ke KRaft mode (Kafka Raft), yang menghilangkan kebutuhan akan Zookeeper.

Mode baru ini membuat arsitektur Kafka lebih sederhana, cepat, dan mudah dikelola.

Pada artikel ini, kita akan membangun Apache Kafka KRaft mode + Kafka UI menggunakan Docker Compose — lengkap dari nol, mulai dari pembuatan folder, penjelasan tiap konfigurasi, hingga pengujian.

Apa Itu Apache Kafka?

Apache Kafka adalah platform distributed streaming yang digunakan untuk:

  • Mengirim, menerima, menyimpan, dan memproses stream data secara real-time.

  • Digunakan dalam sistem yang membutuhkan event streaming seperti logging, telemetry, IoT, analytics, dan komunikasi antar-mikroservis.

Siap — berikut dokumentasi lengkap dan rapi dari nol untuk men-setup Apache Kafka modern tanpa Zookeeper (KRaft mode) menggunakan Docker Compose.

Cocok untuk server seperti milik kamu (Rocky Linux / Ubuntu)

1. Buat Folder Project

Masuk ke direktori kerja yang kamu mau, lalu buat folder bernama kafka:

cd /opt
mkdir -p kafka
cd kafka

Struktur yang akan kita buat nanti seperti ini:

/opt/kafka/
 ├── docker-compose.yml
 └── data/
     ├── kafka/
     └── logs/

Buat folder untuk data Kafka (biar persist setelah restart):

mkdir -p data/kafka data/logs

2. Buat File docker-compose.yml

Gunakan editor favorit (misal vi): pastikan docker compose di buat di folder /opt/kafka/

vi docker-compose.yml

Kemudian isi

services:
  kafka:
    image: apache/kafka:3.8.0
    container_name: kafka
    restart: always
    ports:
      - "9092:9092"
    environment:
      # === Mode modern: tanpa Zookeeper ===
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_NODE_ID: 1
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@localhost:9093
      KAFKA_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.100.70:9092 #sesuaikan dengan ip di server
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT

      # === Cluster ID unik (buat pertama kali saja) ===
      CLUSTER_ID: "5L6g3nShT-eMCtK--X86sw"

      # === Konfigurasi tambahan ===
      KAFKA_LOG_DIRS: /var/lib/kafka/data
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"

    volumes:
      - ./data/kafka:/var/lib/kafka/data
      - ./data/logs:/var/log/kafka

  kafka-ui:
    image: provectuslabs/kafka-ui:latest
    container_name: kafka-ui
    restart: always
    ports:
      - "8080:8080"
    environment:
      - KAFKA_CLUSTERS_0_NAME=LocalKafka
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=10.14.158.186:9092
    depends_on:
      - kafka

3. Format Cluster Kafka (Langkah penting pertama kali)

Kafka mode KRaft harus diformat sekali untuk membuat metadata awal cluster.

Jalankan perintah berikut hanya sekali:

docker compose run --rm kafka kafka-storage format --ignore-formatted --cluster-id=5L6g3nShT-eMCtK--X86sw --config /opt/kafka/config/kraft/server.properties

Jika direktori /opt/kafka/config/kraft/server.properties tidak ada (karena image Kafka bawaan), gunakan perintah yang lebih aman berikut:

docker compose run --rm kafka kafka-storage format --ignore-formatted --cluster-id=5L6g3nShT-eMCtK--X86sw --config /etc/kafka/kraft/server.properties

Kalau sukses, akan muncul pesan seperti:

Formatting was successful.

4. Jalankan Kafka dan Kafka UI

docker compose up -d

Cek container berjalan:

docker ps

Harus muncul dua container:

CONTAINER ID   IMAGE                          COMMAND                  STATUS
xxxxxx         apache/kafka:3.8.0             ...                      Up (healthy)
xxxxxx         provectuslabs/kafka-ui:latest  ...                      Up

5. Akses Kafka UI

http://192.168.100.70:8080

Kafka UI akan langsung menampilkan cluster “LocalKafka”.

6. Tes Buat Topic dan Producer/Consumer

Masuk ke container Kafka:

docker exec -it kafka bash

Buat topic baru:

kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

Lihat daftar topic:

kafka-topics.sh --list --bootstrap-server localhost:9092

Kirim pesan:

kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092

(ketik pesan, lalu tekan Ctrl+C)

Konsumsi pesan:

kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092

7. Stop dan Restart Kafka

Stop service:

docker compose down

Start ulang:

docker compose up -d

Karena data disimpan di ./data/kafka, semua topic dan message akan tetap ada.

8. Troubleshooting Umum

Masalah

Solusi

Formatting is only supported for clusters in KRaft mode

Kamu belum format cluster (lihat langkah 3)

Kafka tidak bisa connect dari luar

Pastikan KAFKA_ADVERTISED_LISTENERS berisi IP server, bukan localhost

Kafka UI tidak bisa connect

Pastikan KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS diisi IP yang sama

Ingin ganti port Kafka

Ubah 9092:9092 ke port lain, dan sesuaikan juga di environment Kafka UI

Struktur Akhir Folder

/opt/kafka/
 ├── docker-compose.yml
 └── data/
     ├── kafka/
     └── logs/

Sekian Tutorial kali ini, semoga bermanfaat

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses

Verified by MonsterInsights