-
Notifications
You must be signed in to change notification settings - Fork 1
Test All Things on the Local Environment
Yungon Park edited this page Feb 10, 2021
·
1 revision
컨테이너 간 통신을 위해 User-defined Bridge Network를 이용합니다.
아래 명령으로 ZooKeeper와 Kafka 컨테이너를 올립니다.
docker network create --driver bridge cdfs-network
docker run -d -e STANDALONE_MODE=yes --network cdfs-network --name zookeeper cdfs-zookeeper
docker run -d -e STANDALONE_MODE=yes --network cdfs-network --name kafka cdfs-kafka그러면 먼저 Topic을 만들고, 이벤트를 한 번 보내 봅시다. (Kafka Quickstart을 참조했습니다.)
docker exec -it kafka bash
root@02c750bdca04:/kafka# cd kafka_2.13-2.6.0
root@02c750bdca04:/kafka/kafka_2.13-2.6.0# bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
Created topic quickstart-events.
root@02c750bdca04:/kafka/kafka_2.13-2.6.0# bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
>first
>second다른 터미널 창에서 다음과 같이 입력해서 이벤트를 읽어봅시다.
docker exec -it kafka bash
root@02c750bdca04:/kafka# cd kafka_2.13-2.6.0
root@02c750bdca04:/kafka/kafka_2.13-2.6.0# bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
first
second종료하려면 Ctrl+C를 누른 뒤, exit 명령을 입력합니다.
Producer 역할을 할 컨테이너를 실행합니다.
docker run -d -e STANDALONE_MODE=yes -p 5000:5000 --network cdfs-network --name kafka-producer cdfs-kafka-producer그리고 테스트 데이터를 넣어 봅시다. 아래와 같이 랜덤 메시지를 볼 수 있습니다.
curl -X POST localhost:5000/upload
{"eventTime":"2021-01-04T12:26:43.720","message":"Random Message: 97"}이 예제에서 Consumer는 10개의 데이터를 모으면 AWS S3 버킷에 데이터를 저장합니다.
먼저 Docker 이미지를 생성하는 과정은 다음과 같습니다. (로컬에서만 테스트하려면 docker tag, docker push는 안 하셔도 됩니다.)
cd consumer
docker build -t cdfs-kafka-consumer .
docker tag cdfs-kafka-consumer hahafree12/cdfs-kafka-consumer
docker push hahafree12/cdfs-kafka-consumer위의 과정들(Zookeeper & Kafka 컨테이너 올라감, Topic 생성, Producer 컨테이너 올라감)이 다 끝나면, Consumer 컨테이너를 올려봅니다.
docker run -d -e STANDALONE_MODE='yes' \
-e AWS_ACCESS_KEY_ID='<AWS Access Key>' \
-e AWS_SECRET_ACCESS_KEY='<AWS Secret Access Key>' \
-e AWS_DEFAULT_REGION='<AWS Region Name>' \
-e S3_BUCKET_NAME='<your-s3-bucket-name>' \
--network cdfs-network --name kafka-consumer cdfs-kafka-consumer10번씩 데이터를 올릴 때마다 AWS S3에 저장을 하는데요. 데이터가 저장되어 있는지 확인해 볼까요?
aws s3 ls s3://<your-s3-bucket-name>
2021-01-05 21:24:04 750 44cdc9d3-8afb-42fb-8305-8166049d90fd
2021-01-05 21:24:08 749 61874ecf-08d9-415c-b1dc-bebc74c9f12e데이터가 들어온 것을 확인할 수 있습니다. 그리고 임의의 파일을 받아서 한 번 내용을 보면...
$ aws s3 cp s3://<your-s3-bucket-name>/44cdc9d3-8afb-42fb-8305-8166049d90fd result_file.txt
download: s3://<your-s3-bucket-name>/44cdc9d3-8afb-42fb-8305-8166049d90fd to ./result_file.txt
$ cat result_file.txt
{"message": "Random Message: 233", "eventTime": "2021-01-05T12:23:58.577"}
{"message": "Random Message: 387", "eventTime": "2021-01-05T12:23:59.384"}
{"message": "Random Message: 846", "eventTime": "2021-01-05T12:23:59.804"}
{"message": "Random Message: 508", "eventTime": "2021-01-05T12:24:00.328"}
{"message": "Random Message: 230", "eventTime": "2021-01-05T12:24:00.758"}
{"message": "Random Message: 686", "eventTime": "2021-01-05T12:24:01.214"}
{"message": "Random Message: 791", "eventTime": "2021-01-05T12:24:01.647"}
{"message": "Random Message: 792", "eventTime": "2021-01-05T12:24:02.079"}
{"message": "Random Message: 768", "eventTime": "2021-01-05T12:24:02.504"}
{"message": "Random Message: 349", "eventTime": "2021-01-05T12:24:02.924"}데이터가 들어와 있는 것을 확인할 수 있습니다.
docker stop zookeeper kafka kafka-producer kafka-consumer
docker rm zookeeper kafka kafka-producer kafka-consumer
docker network rm cdfs-network