AWS 에 Docker 로 Kafka 올리기
내 Mac 에 이것저것 까는걸 싫어하기도 하고
Docker 도 써볼 겸 해서, AWS EC2 Amazon Linux 2 인스턴스에 Docker로 Kafka 를 올려보았다.
하루 정도 삽질 후 알게 된 Lessons 를 공유한다.
이제 개발 시작해야지... ㅠㅠ
1. AWS 환경
공짜인 t2.micro 로 Ubuntu 18, RHEL 8, Amazon Linux 2 모두에서 실행을 해봤는데
이상하게 zookeeper 컨테이너만 떠있고 kafka 브로커는 뜨질 않는 것이다!
마지막에 혹시나 해서 로그를 봤더니 Insufficient Memory... 였다. T.T
메모리가 2GB 이상 필요한 것 같다.
>> 결론: t2.small 이상을 사용할 것.
2. 필수 환경 구성
docker, docker-compose 가 설치되어 있어야 한다.
amazon linux2 에서는 docker 만 snap 패키지 repo 에 있길래
docker-compose 는 repo 추가 후 yum 으로 별도 설치 하였다.
참고로 ubuntu 에서는 둘다 apt 로 설치 가능했던걸로 기억... (우분투로 걍 할걸 ㅠ)
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce
$ sudo usermod -aG docker $(whoami)
(로그아웃/재접속)
$ sudo yum install epel-release
$ sudo yum install -y python-pip
$ sudo pip install docker-compose
3. dockerfile 가져오기 (docker-compose 활용)
https://github.com/wurstmeister/kafka-docker.git
wurstmeister/kafka-docker
Dockerfile for Apache Kafka. Contribute to wurstmeister/kafka-docker development by creating an account on GitHub.
github.com
에서 git checkout 후에 kafka-docker 폴더로 이동.
$ git clone https://github.com/wurstmeister/kafka-docker.git
$ cd kafka-docker
4. Container 올리기 (Step-by-Step)
$ vi docker-compose.yml
KAFKA_ADVERTISED_HOST_NAME 을 eth0 의 ip로 변경한다. (ifconfig eth0 하면 나오는 ipv4)
** 만약 간단하게 외부에서 접근하게 하려면 eth0의 ip 말고 Public IP 를 입력하면 된다. 단 방화벽 푸는 전제임 (32000-33000)
$ docker-compose up
$ docker-compose scale kafka=2
이 때 docker ps 하면 zookeeper 1개, kafka broker 2개가 up 되어 있음을 확인할 수 있다.
정상이면 container 의 쉘로 들어가서 아래와 같이 토픽 produce 를해볼 수 있다.
$ start-kafka-shell.sh [eth0 ip] [eth0 ip:2181]
$KAFKA_HOME/bin/kafka-topics.sh --create --topic mytopic --partitions 4 --zookeeper $ZK --replication-factor 2`
또 다른 container 쉘에서 consumer 역할을 수행해볼 수 있다.
$KAFKA_HOME/bin/kafka-console-consumer.sh --topic=mytopic --zookeeper=$ZK
요약: 회사일 할땐 그냥 돈을 쓰자. 한달에 2만원 정도 나올듯.