Create an isolated Docker network for the stack:
docker network create --driver bridge kafkaNet
ZooKeeper container
docker run -d \
--name zk \
--network kafkaNet \
-p 2181:2181 \
-e ALLOW_ANONYMOUS_LOGIN=yes \
bitnami/zookeeper:latest
Kafka broker
Replace HOST_IP with the address Docker will advertise to cleints outside the bridge network.
docker run -d \
--name broker \
--network kafkaNet \
-p 9092:9092 \
-e KAFKA_CFG_ZOOKEEPER_CONNECT=zk:2181 \
-e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://HOST_IP:9092 \
-e ALLOW_PLAINTEXT_LISTENER=yes \
bitnami/kafka:latest
Optoinal web UI
docker run -d \
--name ui \
--network kafkaNet \
-p 9001:8080 \
-v /opt/kafka-ui:/data \
-e DEFAULT_USERNAME=admin \
-e DEFAULT_PASSWORD=admin \
--restart unless-stopped \
dushixiang/kafka-map:latest
Smoke test
Create a topic:
docker exec broker \
kafka-topics.sh --create \
--topic demo \
--bootstrap-server broker:9092 \
--partitions 1 --replication-factor 1
Producer:
docker exec -it broker \
kafka-console-producer.sh \
--broker-list broker:9092 \
--topic demo
Consumer:
docker exec -it broker \
kafka-console-consumer.sh \
--bootstrap-server broker:9092 \
--topic demo \
--from-beginning
Spring Boot snippet
spring:
application:
name: kafka-demo
kafka:
bootstrap-servers: HOST_IP:9092
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
batch-size: 65536
buffer-memory: 524288
consumer:
group-id: demo-group
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
max-poll-records: 100