목표
카프카를 이전에 간단한 이론정도로 학습해봤지만, 뭔가 제대로 와닿은 느낌이 없었다.
그냥 대략적으로 훑어본 수준이고,
프로젝트를 하긴 했지만 뭔가 시착오가 있어서 제대로된 결과물이 만족스럽지 않아서 다시 도전 해보려고한다!
특히 그때는 ec2에다가 직접 카프카를 설치했지만, 이번엔 도커로 해보자!
그래서 나의 목표는 아래와 같이 3가지이다.
- docker로 카프카 구축해보기 : topic만들고, 메세지를 직접 입력해보면서 프로듀서와 컨슈머 확인해보기
- Python으로 실시간 데이터 전송하기 : 연속적으로 들어오는 임의의 데이터를 python으로 만들고 메세지 전송확인하기
- 트위터API를 사용해서 실제데이터 전송하기 : 이제 python코드를 직접 수정해서 실제 데이터를 전송해보는 것이다.
Docker로 카프카 서버띄우기
카프카는 카프카클러스터와 주키퍼가 설치되어 있어야해서 docker-compose로 컨테이너간의 연결작업이 필요하다.
Docker-compose.yml 파일 작성하기
version: '2'
services:
zookeeper:
container_name: local-zookeeper
image: wurstmeister/zookeeper:3.4.6
ports:
- "2181:2181"
kafka:
container_name: local-kafka
image: wurstmeister/kafka:2.12-2.3.0
depends_on:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
KAFKA_ADVERTISED_PORT: 9092
KAFKA_CREATE_TOPICS: "test_topic:1:1" # Topic명:Partition개수:Replica개수
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
실행 : docker-compose -f docker-compose.yml up -d
종료 : docker-compose down
+ 앗, docker-compose가 실행되지 않았다
에러코드 : [19164] Failed to execute script docker-compose
해결: docker desktop을 실행하지 않았음!
Docker-Compose 실행
실행 : docker-compose -f docker-compose.yml up -d
각 컨테이너의 log보기
zookeeper로그 : docker container logs local-zookeeper
kafka 로그 : docker container logs local-kafka
컨테이너(kafka) 접속하기
docker exec -i -t local-kafka bash
확인
Kafka 테스트해보기1-일반 메세지
이제 docker-compose로 주키퍼1대, 클러스터1대가 제대로 구동중인지 확인해본다.
kafka 공식문서 quickstart에서 나온 방법대로
토픽을 만들고, producer,comsumer를 실행해서 메세지가 옮겨가는걸 보면된다!
Kafka 다운로드
wget https://www.apache.org/dyn/closer.cgi?path=/kafka/0.10.2.0/kafka_2.12-0.10.2.0.tgz
이제 다운받은 압축파일을 풀기만 하면 되는데.. (이것때문에 뻘짓햇네..ㅠㅠ)
tar : invail magic
tar : short read
문제가 나왔는데,
그냥 직접 로컬에서 다운받고 docker cp로 컨테이너에 옮겼다....다운받은 파일이 문제인듯
docker복사 : docker cp 파일 컨테이너이름:위치
Topic 생성 및 확인
docker-compose.yml로 아예 생성할때 토픽까지 만들었다.
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
Producer 시작하기
kafka-console-producer.sh --broker-list localhost:9092 --topic test_topic
Consumer 시작하기
또다른 커미널을 열고 프로듀셔와 같은 path에 접속한다
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test_topic --from-beginning
메세지전송확인하기
그럼 producer에서 메세지를 입력하면 consumer로 메세지가 보여지는 걸 확인할 수 있다.
추가로 아래는 kafka와 관련된 명령어이다
## topic 생성!
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
## topic 조회!
bin/kafka-topics.sh --list --zookeeper localhost
## test의 producer 내용 확인
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
## test의 consumer 내용 확인
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
## test topic 제거
bin/kafka-topics.sh --delete --zookeeper localhost --topic test
## test topic 제거 조회
bin/kafka-topics.sh --list --zookeeper localhost
해당 설정 값을 바꾼 후에는 반드시 kafka 를 재시작 해야 한다.
참고한자료
https://akageun.github.io/2019/09/10/docker-compose-local-kafka.html
https://tommypagy.tistory.com/226
'🌿 Data Engineering > Study' 카테고리의 다른 글
[Elasticsearch] 내부구조, cluster/index/replica/shard 개념정리 (0) | 2021.12.23 |
---|---|
[Kafka] Docker로 Kafka구축하기 | 트위터API사용해서 실시간데이터 전송하기 (0) | 2021.08.11 |
[Kafka] Docker로 Kafka 구축하기 | Python으로 Producer,Consumer 구현 (0) | 2021.08.11 |
[ELK] Flask 웹로그 분석해보기2-Flask 로그남기기 (0) | 2021.07.09 |
[ELK] Flask 웹로그 분석해보기1-Docker로 ELK Stack 설치 (0) | 2021.07.06 |
📊ELK Stack이란? Elastic Search, Logstash, Kibana (0) | 2021.07.05 |