본문 바로가기

MSA

Kafka + Docker + Docker-compose 예제

 

내가 최종적으로 구현하고 싶은 것은 웹스크랩핑을 통해 얻은 데이터를 카프카를 통해 분산처리 하여 디비에 저장하는 것이다

그러기 위해선 우선 연습용으로 로컬에서 Docker로 Kafka를 설치하는 방법을 기록해보려고 한다

(상용서버에서는 최소 3개의 Kafka 클러스터를 구성한다고 하는데 aws 프리티어 계정을 쓰고 있는 현재로써는 우선 한개만...ㅜ)

 

 

Docker, docker-compose 가 설치되어 있다는 전재하에 진행해보겠다 !

 

 

kafka-compose.yml파일 생성

우선 Docker로 kafka를 설치하기 위한 kafka-compose.yml파일을 만들어주자

kafka-compose.yml


version: '3.8'
services:
  zookeeper:
    image: wurstmeister/zookeeper:latest
    container_name: zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka:latest
    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

 

 

다음 명령어로 zookeeper와 kafka를 실행해준다

docker-compose -f kafka-compose.yml up -d

 

 

docker ps 로 실행중인가 확인해보기 !!

 

 

생성된 kafka shell에 아래 명령어로 접속한다

docker exec -it kafka /bin/bash

 

 

 

토픽 생성

아래 명령어를 통해 my-topic이라는 이름으로 토픽을 생성한다

kafka-topics.sh --create --topic my-topic --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1

--bootstrap-server localhost:9092 :  카프카 브로커에 연결하기 위한 주소와 포트로 현재는 로컬호스트에서 실행중인 카프카 브로커와 연결시킨다

--replication-factor 1 : 토픽의 복제 팩터를 지정하여 각 파티션이 몇 개의 브로커에 복제될지를 결정

--partitions 1 : 토픽의 파티션 수로 토픽 데이터를 분할하여 병렬로 처리할 수 있게 해줌

 

참고

- 토픽 리스트 확인: kafka-topics.sh --list --bootstrap-server localhost:9092
- 토픽 상세 조회: kafka-topics.sh --describe --topic my-topic --bootstrap-server kafka:9092
- 토픽 삭제: kafka-topics.sh --delete --bootstrap-server kafka:9092 --topic my-topic

 

 

 

컨슈머 실행 

우선 shell 파일이 있는  /opt/kafka_2.13-2.8.1/bin 위치로 이동해야한다

그리고 아래 명령어를 통해 consumer를 실행시키자

cd /opt/kafka_2.13-2.8.1/bin

kafka-console-consumer.sh --topic my-topic --bootstrap-server kafka:9092

 

 

 

프로듀서 실행

마찬가지로 shell 파일이 있는  /opt/kafka_2.13-2.8.1/bin 위치로 이동한다

그리고 아래 명령어를 통해 producer를 실행시키자

 cd /opt/kafka_2.13-2.8.1/bin

kafka-console-producer.sh --topic my-topic --broker-list kafka:9092

 

 

 

실행결과 화면

producer에서 보낸 메세지가 consumer에서 출력되는 것을 볼 수 있다 ~!

producer
consumer

 

 

 

끄읏 -!