이 글에서는 local 환경에서 Docker를 이용하여 Kafka 서버를 구축하는 방법에 대해 알아보겠습니다.
01. 도커 이미지 선택
현재(2020-08-26 기준) Kafka 이미지는 공식 버전이 없으므로 Star가 제일 많은 이미지를 선택하려고 합니다.
wurstmeister/kafka 이미지가 제일 인기가 많네요.
문서도 잘되어있고, 참조할 레퍼런스도 많은듯하여 해당 이미지를 선택하도록 하겠습니다 ㅎㅎ
02. 사전 준비
wurstmeister/kafka 이미지에서 제공하는 문서를 보시면, 사전 준비가 몇가지 필요합니다.
우선 본인의 시스템에서 docker-compose를 사용할 수 있는지 확인합니다.
kafka는 항상 zookeeper가 사전에 실행되어야 하므로, compose로 실행하는 것이 편리합니다.
Docker for Mac/Windows 또는 Docker Toolbox를 설치하셨다면 이미 docker-compose는 설치가 되어있습니다.
# docker-compose version
문서의 나머지 항목들은 docker-compose.yml 파일을 작성할때 필요에 따라 작성해주면 됩니다.
여기서는 간단하게 환경을 구축할 목적이므로 KAFKA_ADVERTISED_HOST_NAME 부분만 수정하도록 하겠습니다.
03. docker-compose.yml 파일 작성
가장 기본이 되는 docker-compose.yml 파일은 다음과 같습니다. ( 참고링크 )
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka:2.12-2.5.0
container_name: kafka
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
kafka 뿐만 아니라, zookeeper도 작성되어 있는 것을 확인할 수 있습니다.
문서에 따르면, KAFKA_ADVERTISED_HOST_NAME는 본인의 docker host ip로 수정해주면 됩니다.
저는 여기서 multi broker를 사용하지 않을 것이므로, localhost(127.0.0.1)을 작성하도록 하겠습니다.
해당 파일의 작성위치는 편하신 곳에 작성하시면 됩니다.
04. 실행 및 테스트
docker-compose.yml 파일을 작성했으니 compose를 실행해보겠습니다.
# docker-compose up -d
이미지를 잘 받았고... done이 되었으니, 실제로 컨테이너가 실행되고 있는지 상태를 확인해보겠습니다.
# docker container ls
컨테이너도 잘 실행되었네요~
다음으로 실제로 메시지를 생산/소비하면서 잘 동작하는지 확인해봐야겠죠?
그러기 위해서는 컨테이너에 접근하여 명령어를 직접 실행해봐야 합니다.
# docker container exec -it kafka bash
# kafka-topics.sh --list --bootstrap-server localhost:9092
이렇게 kafka-topcis.sh 파일을 실행하여 옵션들을 작성해주면 명령어들을 실행해볼 수 있습니다.
위의 예시는 토픽 목록을 확인한 것이며, 저의 kafka 서버에는 email이라는 토픽이 존재하고 있습니다.
테스트를 하기 위한 Kafka 명령어는 이글 또는 공식문서 Quick Start를 참고하시길 바랍니다.
이상으로 Docker로 Kafka local 환경을 구축해보았습니다.
구체적인 사용 방법들은 문서를 확인하시길 바랍니다!
참고 문서
- https://hub.docker.com/r/wurstmeister/kafka
- https://medium.com/big-data-engineering/hello-kafka-world-the-complete-guide-to-kafka-with-docker-and-python-f788e2588cfc