isPowerfulBlog

[Kafka] Docker로 Producer, Consumer 통신하기 (Python) 본문

Data Engineering

[Kafka] Docker로 Producer, Consumer 통신하기 (Python)

왕밤빵도라에몽 2023. 3. 22. 20:23

kafka cluster를 실행하면 compose의 broker에 접속해 직접 producer와 consumer를 통신해볼 수 있었다.
근데 나는 producer코드를 짜고 consumer코드를 짜서 각각 도커 컨테이너를 띄우고 카프카 컨테이너로 통신하고 싶었다.

image

이런 그림을 원한다!


그래서 아래 세 개를 network로 묶어주기로 했다.

  • Producer 컨테이너
  • Consumer 컨테이너
  • Kafka Cluster Compose 컨테이너

docker compose에서 network 설정

# kafka-cluster/docker-compose.yaml

version: "2"

services:
  zookeeper:
    ...

  broker:
    ...

networks:
  default:
    name: my-network
  • service와 같은 높이에 networks설정을 해준다.
# producer/docker-compose.yaml

version: "3"

services:
  producer:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: producer

networks:
  default:
    name: my-network
    external: true
  • networks로 엮기 위해 producer와 consumer도 docker-compose.yaml 파일을 생성한다.
  • kafka cluster에서 생성한 network를 producer와 consumer는 그대로 사용할 것이기 때문에 external:true 옵션을 추가한다.
  • external: true: 새 network 가 만들어지지 않고, 기존 network 에 연결되게 하는 옵션

실행

의존성이 발생하는 문제이기 때문에 컨테이너를 실행 순서를 지켜줘야한다,

  1. kafka 클러스터 실행
  2. consumer 실행
  3. producer 실행
$ docker compose -p kafka-cluster -f /kafka-cluster/docker-compose.yaml -d up

# terminal 1
$ docker compose -p consumer -f /consumer/docker-compose.yaml up

# terminal 2
$ docker compose -p producer -f /producer/docker-compose.yaml up
  • -d 옵션: 백그라운드 실행

demo

현재 나는 유튜브 api를 사용해 댓글 데이터를 받아오는 부분을 하는 중인데 아래와 같이 잘 된다.

image


References

https://velog.io/@lijahong/0%EB%B6%80%ED%84%B0-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-Docker-%EA%B3%B5%EB%B6%80-Docker-Compose-Network-Volume-%EC%A0%95%EC%9D%98%ED%95%98%EA%B8%B0