Untuk deploy kafka, saya akan menggunakan docker agar lebih mudah. Saya menggunakan kafka dari wursmeister karena lebih ringan dibanding punya versi bitnami dan mempunyai dokumentasi yang cukup lengkap.
Deploy dengan docker-compose
Deploy dengan docker-compose.yml
- Buat docker-compose.yml file
version: "3.7"
services:
# harus ada zookeeper!
# zookeeper ini bekerja sebagai pengatur semua aktivitias di kafka
zookeeper:
container_name: zookeeper
image: wurstmeister/zookeeper:latest
ports:
- "2181:2181"
networks:
- kafka-net
kafka:
container_name: kafka
image: wurstmeister/kafka:latest
#tidak ada port khusus untuk kafka
#silahkan gunakan random port
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka
#zookeeper container dan port
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
#bedakan port docker dan localhost
KAFKA_LISTENERS: LISTENER_DOCKER://kafka:9091,LISTENER_LOCALHOST://kafka:9092
KAFKA_ADVERTISED_LISTENERS: LISTENER_DOCKER://kafka:9091,LISTENER_LOCALHOST://localhost:9092
#biar gampang, gunakan plaintext saja dulu
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_DOCKER:PLAINTEXT,LISTENER_LOCALHOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_DOCKER
depends_on:
- zookeeper
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- kafka-net
networks:
kafka-net:
- Jalankan dengan
docker-compose up -d
. Untuk cek sudah jalan atau tidaknya, bisa dengannc -zv localhost 9092
atau bila ingin menggunakan GUI bisa menggunakan offset explorer .

Akses Kafka dengan Offset Explorer
Penjelasan
Akses Kafka di Localhost
Yang sebenarnya perlu diperhatikan adalah di variabel KAFKA_LISTENERS & KAFKA_ADVERTISED_LISTERNERS
KAFKA_LISTENERS: LISTENER_DOCKER://kafka:9091,LISTENER_LOCALHOST://kafka:9092
KAFKA_ADVERTISED_LISTENERS: LISTENER_DOCKER://kafka:9091,LISTENER_LOCALHOST://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_DOCKER:PLAINTEXT,LISTENER_LOCALHOST:PLAINTEXT
Maka kafka hanya akan bisa di akses di localhost.
Akses Kafka di Docker Saja
Bila hanya perlu kafka di docker hapus saja LISTENER_LOCALHOST nya
KAFKA_LISTENERS: LISTENER_DOCKER://kafka:9091
KAFKA_ADVERTISED_LISTENERS: LISTENER_DOCKER://kafka:9091
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_DOCKER:PLAINTEXT
Nama dari LISTENER_DOCKER dan LISTENER_LOCALHOST bukan nama wajib, anda bebas mengganti nya dengan nama apapun juga, pastikan nama mudah di ingat dan dibedakan!
Akses Kafka untuk Local Subnet
Agar lebih mudah dibedakan maka LISTERNET_LOCALHOST akan saya ganti dengan LISTENER_INTRANET
KAFKA_LISTENERS: LISTENER_DOCKER://kafka:9091,LISTENER_INTRANET://kafka:9092
KAFKA_ADVERTISED_LISTENERS: LISTENER_DOCKER://kafka:9091,LISTENER_INTRANET://192.168.1.2:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_DOCKER:PLAINTEXT,LISTENER_INTRANET:PLAINTEXT
Bagaimana agar bisa di akses lewat internet? Tinggal di ganti IP local dengan IP public
Berikut contoh docker-compose.yml kafka agar bisa di akses lewat local subnet
version: "3.7"
services:
zookeeper:
container_name: zookeeper
image: wurstmeister/zookeeper:latest
ports:
- "2181:2181"
environment:
ZOO_TICK_TIME: 400000
networks:
- kafka-net
kafka:
container_name: kafka
image: wurstmeister/kafka:latest
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENERS: LISTENER_DOCKER://kafka:9091,LISTENER_INTRANET://kafka:9092
KAFKA_ADVERTISED_LISTENERS: LISTENER_DOCKER://kafka:9091,LISTENER_INTRANET://192.168.1.2:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_DOCKER:PLAINTEXT,LISTENER_INTRANET:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_DOCKER
depends_on:
- zookeeper
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- kafka-net
networks:
kafka-net: