본문 바로가기
🌿 Data Engineering/Study

[Kafka] Docker로 Kafka 구축하기 | Producer에서 Consumer로 메세지 전송

by 카프리썬_ 2021. 8. 10.
728x90
728x90

목표

카프카를 이전에 간단한 이론정도로 학습해봤지만, 뭔가 제대로 와닿은 느낌이 없었다.

그냥 대략적으로 훑어본 수준이고,

프로젝트를 하긴 했지만 뭔가 시착오가 있어서 제대로된 결과물이 만족스럽지 않아서 다시 도전 해보려고한다! 

특히 그때는 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을 실행하지 않았음! 

참고 : https://www.python2.net/questions-1294652.htm

 

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

 

docker-compose 를 사용하여 kafka 개발환경 구축해보기!

언제나 개발하기를 즐기는 개발자 입니다.

akageun.github.io

http://www.kwangsiklee.com/2017/03/docker-compose%EB%A1%9C-kafka%EB%A5%BC-%EB%A1%9C%EC%BB%AC%EC%97%90-%EB%9D%84%EC%9B%8C%EB%B3%B4%EC%9E%90/

 

docker-compose로 kafka를 로컬에 띄워보자!

개요 회사 업무중 카프카를 로컬에서 설치/테스트 할 필요가 생겼다. 카프카 개념 및 설치에 대한 이해는 Kafka 운영자가 말하는 처음 접하는 Kafka 글과 카프카 공식 홈페이지가 도움이 되었다. 필

www.kwangsiklee.com

https://tommypagy.tistory.com/226

 

Docker로 카프카 서버 띄우기 (kafka 설치)

Apache Kafka Install on Linux 개요 분산 애플리케이션 관리를 위한 안정적 코디네이션 애플리케이션 각 애플리케이션의 정보를 중앙에 집중하고 구성 관리, 그룹 관리 네이밍, 동기화 등의 서비스 제

tommypagy.tistory.com

 

728x90
반응형