docker-compose로 ubuntu에서 Kafka 실행해 보기
이 글은 내가 직접 우분투에서 도커로 카프카를 실행해 보기 위한 사투를
벌인 글이라 정확하지 않을 수 있다.
하지만 카프카가 동작이 되는 것을 확인 했고,
내가 실행한 것까지만 기록할 것이다.
참고만 바란다.
환경
자바 : 17
springboot : 3.1.1
1. docker-compose.yml을 작성한다.
version: "2"
services:
zookeeper:
image: docker.io/bitnami/zookeeper:3.8
ports:
- "2181:2181"
volumes:
- "zookeeper_data:/bitnami"
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
kafka:
image: docker.io/bitnami/kafka:3.4
ports:
- "9092:9092"
volumes:
- "kafka_data:/bitnami"
environment:
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_ENABLE_KRAFT=no
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
depends_on:
- zookeeper
back_end:
image: tiktokyi/spring-server
ports:
- 8080:8080
volumes:
zookeeper_data:
driver: local
kafka_data:
driver: local
위 yml은 docker에서 kafka 이미지를 찾다가 공식문서를 확인한 것을 바탕으로 작성한 것이다.
스크롤을 내리다 보면 자세하게 yml 작성법이 있다.
https://hub.docker.com/r/bitnami/kafka
다른 여러 이미지를 찾아보다가 나의 현재 Java와 SpringBoot의 버전이 무엇인지
확인해 가며 괜찮은 이미지를 비교해 보았다.
# 구글링을 하며 메모장에 남겼던 것들이다.
# 내용과는 아무런 관계가 없다.
springboot 3.1.1
kafka 3.1.0
java 17
zookeeper 3.6.3
도커
ubuntu 22.04
kafkaimage
카프카 명령어 참고
https://hub.docker.com/r/ubuntu/kafka
도커 풀 명령 docker pull ubuntu/kafka
이미지를 로컬에서 실행
docker run -d --name kafka-container -e TZ=UTC -p 9092:9092 -e ZOOKEEPER_HOST=host.docker.internal ubuntu/kafka:3.1-22.04_beta
컨테이너 디버깅
docker logs -f kafka-container
위에서 열심히 찾아본것과는 달리 bitnami/kafka는 최신버전으로 알아서 설치가된다.
(특정 버전을 설치하는 것도 가능하다. 그것은 위의 링크를 참고하자.)
구글링 해가며 여러 이미지를 쓴 코드를 보며 관련 포스팅을 읽었는데,
써본 적이 없는 이미지들이라 차이를 잘 모르겠었다.
그래서 직접 도커허브에 들어가 kafka와 관련된 이미지를 검색해서 찾아보았다.
무엇을 할지 눌러보며 사용법은 어떻게 되는지 계속 비교해 보다가
맨 위에 있는 bitnami/kafka가 다운로드수도 압도적으로 많고
설명도 매우 잘되어있어서 선택했다.
2. 작성한 yml을 ubuntu에 업로드
가시적으로 비교하며 확인하기 위해 로컬에서 작성한
docker-compose.yml을 ubuntu에 업로드하였다.
ubunut에서 text편집기를 사용하여 작성하여도 상관없다.
주의!! 아래의 명령어를 실행하면 위에서 선정한 이미지를 다운로드할 수 있다.
docker pull bitnami/kafka:latest
하지만 docker-compose.yml를 실행하면 똑같은 이미지가 다운되어
같은 containerID를 가지게 되고 지우려고 하면 conflict가 발생할 것이다.
$ docker rmi -f "컨테이너 ID 2자리"
-f를 붙여주면 강제로 삭제할 수 있다.
SWAP으로 파티션 나누기
주의!! docker compose를 실행하면 이미지는 모두 잘 다운된다.
하지만
# 모든 컨테이너 확인
$ docker ps -a
명령어로 확인하면 STATUS에 Kafka가 Exited 라며 종료되었다고 알려준다.
kafka container의 로그를 확인해 보면
로그확인 명령어
docker logs <컨테이너 ID 2글자>
위 이미지의 15번째 줄쯤에
errno=12를 확인할 수 있다.
EC2인스턴스의 공간이 부족하여 설치하지 못할 때 발생하는 오류이다.
AWS의 EC2는 SWAP파티션이 없다.
프리티어는 메모리가 작기 때문에 멈춘다.
직접 SWAP 파티션을 생성해 주면 해결된다.
swap디렉터리 생성
# create a directory
$ sudo mkdir /var/spool/swap
swap partition 할당
# swap partition 2GB 할당
$ sudo touch /var/spool/swap/swapfile
$ sudo dd if=/dev/zero of=/var/spool/swap/swapfile count=2048000 bs=1024
# swapfile 생성 확인
$ ls -l /var/spool/swap
swap 파일 설정
# swap 파일 설정
$ sudo chmod 600 /var/spool/swap/swapfile
$ sudo mkswap /var/spool/swap/swapfile
$ sudo swapon /var/spool/swap/swapfile
swap 파일 등록
# vi 편집기로 텍스트 작성
$ sudo vi /etc/fstab
# 아래 이미지와 같이 아래쪽에 추가
/var/spool/swap/swapfile none swap defaults 0 0
위 과정을 마쳤다면 Kafka가 정상적으로 다운로드될 것이다.
내용 참고 - AHN DOO-RI
내용 참고 - 코린이의 개발노트
3. docker-compose 실행
# docker compose를 데몬으로 실행
docker compose up -d
모든 컨테이너 확인
$ docker ps -a
swap을 해주었더니 정상적으로 작동이 되고 있다.
Kafka 로그 확인
$ docker logs <컨테이너ID 2글자>
무수한 로그들이 나온다.
천천히 보면
Kafka를 설치하고 실행을 알아서 한다.
'도커 탐구' 카테고리의 다른 글
Docker) docker-compose로 ubuntu에서 스프링부트 실행해보기 (0) | 2023.07.05 |
---|