isPowerfulBlog

[Kafka] Docker에서 Kafka 단일 Broker Cluster 구성하기 본문

Data Engineering

[Kafka] Docker에서 Kafka 단일 Broker Cluster 구성하기

왕밤빵도라에몽 2023. 3. 22. 19:53

도커이미지를 이용해서 간편하게 단일 브로커 Kafka 클러스터를 구성해보기

image

이미지 출처: https://www.tutorialspoint.com/apache_kafka/apache_kafka_cluster_architecture.htm


카프카를 운영하기 위해서

  • kafka cluster
  • zookeeper: kafka cluster 관리
    가 필요하다

Requirements

Docker Hub에 있는 confluentinc의 zookeeper, broker 이미지를 사용한다.

REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE
confluentinc/cp-kafka       7.3.0     b526943eeea4   5 months ago    828MB
confluentinc/cp-zookeeper   7.3.0     b3ebff3db01d   5 months ago    828MB

Docker Compose

zookeeperbroker, 두 서비스를 엮어야하기 때문에 docker compose로 컨테이너를 실행해줘야한다.

# kafka-cluster/docker-compose.yaml

version: "2"

services:
  zookeeper:
    image: confluentinc/cp-zookeeper:7.3.0
    container_name: zookeeper
    ports:
      - 2181:2181
    environment:
      ZOOKEEPER_SERVER_ID: 1
      ZOOKEEPER_CLIENT_PORT: 2181

  broker:
    image: confluentinc/cp-kafka:7.3.0
    container_name: broker
    depends_on:
      - zookeeper
    ports:
      - 9092:9092
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0

실행

$ docker compose -p kafka-cluster -f docker-compose.yaml -d

컨테이너 접속

broker 서비스 접속

$ docker compose -p kafka-cluster exec broker kafka-topics --describe --topic topic-test --bootstrap-server broker:29092
  • broker에서 kafka-topics를 실행해서 topic만들기
$ docker compose -p kafka-cluster exec broker /bin/bash
  • broker의 터미널 실행
  • cmd창을 두 개 켜서 하나는 broker 터미널에서 consumer 실행, 하나는 producer 실행해서 통신해볼 수 있다.

References

https://mlops-for-mle.github.io/tutorial/docs/kafka/producer-consumer