내가 최종적으로 구현하고 싶은 것은 웹스크랩핑을 통해 얻은 데이터를 카프카를 통해 분산처리 하여 디비에 저장하는 것이다
그러기 위해선 우선 연습용으로 로컬에서 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에서 출력되는 것을 볼 수 있다 ~!
끄읏 -!