Kafka 서버를 Docker 컨테이너로 실행하는 방법을 단계별로 정리해드리겠습니다. 가장 일반적인 방식은 Docker Compose를 이용하여 Kafka와 Zookeeper를 함께 실행하는 방법입니다.
Kafka 서버 Docker 컨테이너 실행 단계별 가이드
1. Docker 및 Docker Compose 설치 확인
-
먼저 Docker가 설치되어 있는지 확인합니다.
bashdocker --version
docker-compose --version
-
설치되어 있지 않다면 Docker 공식 사이트에서 설치 후, Docker Compose도 설치합니다.
2. Kafka와 Zookeeper를 위한 Docker 네트워크 생성 (선택)
-
컨테이너 간 통신을 위해 별도의 Docker 네트워크를 생성할 수 있습니다.
bashdocker network create kafka-network
3. docker-compose.yml 파일 작성
-
Kafka와 Zookeeper를 한 번에 실행하도록 docker-compose 파일을 만듭니다.
-
아래는 싱글 노드 Kafka 환경 예시입니다.
version: '3.8'
services:
zookeeper:
image: wurstmeister/zookeeper:3.4.6
container_name: local-zookeeper
ports:
- "2181:2181"
networks:
- kafka-network
kafka:
image: wurstmeister/kafka:2.13-2.8.1
container_name: local-kafka
depends_on:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_CREATE_TOPICS: "my-topic:1:1" # 생성할 토픽명: 파티션 수: 복제본 수
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- kafka-network
networks:
kafka-network:
driver: bridge
4. Docker Compose로 Kafka 컨테이너 실행
-
docker-compose.yml파일이 있는 디렉터리에서 다음 명령어를 실행합니다.bashdocker-compose up -d
-
컨테이너가 백그라운드에서 실행되며,
docker ps명령으로 실행 상태를 확인할 수 있습니다.
5. Kafka 토픽 생성 및 테스트

-
Kafka 컨테이너에 접속하여 토픽을 만들거나 콘솔을 통해 메시지를 주고받을 수 있습니다.
bashdocker exec -it local-kafka bash
-
토픽 생성 명령 예:
bashkafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
-
프로듀서 메시지 전송 예:
bashkafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
-
컨슈머 메시지 수신 예:
bashkafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092
6. 컨테이너 중지 및 제거
-
Kafka와 Zookeeper 컨테이너를 중지하려면:
bashdocker-compose down
참고사항
-
wurstmeister/kafka이미지는 널리 쓰이는 Kafka Docker 이미지입니다. -
KAFKA_ADVERTISED_HOST_NAME는 호스트 IP 또는 도커 네트워크에 맞게 설정해야 합니다. -
필요에 따라 여러 토픽 생성, 토픽 설정, 클러스터 확장도 가능합니다.
-
M1/M2 Mac 같은 ARM 기반 환경에서는 이미지 호환성을 반드시 확인하세요.
이 과정으로 로컬 또는 개발 환경에서 쉽게 Kafka 서버를 Docker 컨테이너로 띄워 사용할 수 있습니다.