✍️ 이 글에서 사용한 코드: 깃헙
이번 글에서는 Docker + Kafka HelloWorld를 해보도록 하겠다.
Kafka와 Zookeeper 조합으로 구동할 것이고, GUI환경에서 Kafka를 관리할 수 있는 Kafka-UI까지 세팅해보도록 하겠다.
bitnami/kafka:3.7.0
bitnami/zookeeper:3.9.2
provectuslabs/kafka-ui:0.7.2
services:
zookeeper-0:
image: bitnami/zookeeper:3.9.2
container_name: zookeeper-0
ports:
- 2181:2181
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ALLOW_ANONYMOUS_LOGIN: yes
kafka-0:
image: bitnami/kafka:3.7.0
container_name: kafka-0
ports:
- 9094:9094
environment:
ALLOW_PLAINTEXT_LISTENER: yes
KAFKA_ENABLE_KRAFT: no
KAFKA_CFG_ZOOKEEPER_CONNECT: zookeeper-0:2181
KAFKA_CFG_LISTENERS: PLAINTEXT://:9092,EXTERNAL://:9094
KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://kafka-0:9092,EXTERNAL://localhost:9094
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT
kafka-ui:
image: provectuslabs/kafka-ui:v0.7.2
container_name: kafka-ui
depends_on:
- kafka-0
ports:
- 8080:8080
environment:
KAFKA_CLUSTERS_0_NAME: local
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka-0:9092
먼저, 위와 같이 docker-compose.yml
파일에 주키퍼, 카프카, 카프카-UI에 대한 설정을 한다.
KAFKA_ENABLE_KRAFT
: Kafka 3.3.0 이상부터는 Zookeeper를 사용하지 않을 수 있는 KRAFT모드를 제공한다. 하지만, 이 글에서는 Zookeeper모드를 사용할 것이므로, no
라고 세팅해준다. KAFKA_CFG_LISTENERS
: Kafka 브로커가 수신 대기할 주소와 포트를 설정.KAFKA_CFG_ADVERTISED_LISTENERS
: Kafka 브로커가 클라이언트에게 알리는 주소를 설정.KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP
: 각 리스너가 사용할 보안 프로토콜을 설정.docker-compose up -d
위 명령어를 통해서 Docker 컨테이너를 생성 및 실행한다.
그러면, 위와 같이 정상적으로 컨테이너가 실행된 것을 확인할 수 있다.
아래의 과정이 정상적으로 수행됐다면, Zookeeper와 Kafka의 연동이 완료된 것이다. 👍
docker exec -it kafka-0 sh
cd /opt/bitnami/kafka
bash bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092
localhost:8080
에 접속해보면, 위와 같이 정상적으로 브로커가 등록되어 있는 것을 확인할 수 있다.