DevOps/Kafka

Mac OS에서 쓸 수 있는 kafka docker-compose 구성 (arm 64)

키깡 2024. 11. 21.
728x90

Docker Compose를 이용한 Kafka 클러스터 구성

Kafka는 분산 메시징 시스템으로, 데이터 스트리밍 처리에 널리 사용된다. 이 글에서는 Docker Compose를 활용하여 Zookeeper와 Kafka 브로커 3개로 구성된 로컬 환경을 구축하는 방법을 다룬다. 또한, Kafka UI 및 관리 도구를 포함하여 운영 환경을 시뮬레이션할 수 있는 구성 방법도 설명한다.


1. Kafka 클러스터 개요

Kafka 클러스터는 일반적으로 다음과 같은 구성 요소를 포함한다.

  1. Zookeeper: Kafka 브로커들의 메타데이터를 관리하며 클러스터의 상태를 조율한다.
  2. Kafka 브로커: 메시지를 저장하고 클라이언트로부터의 요청을 처리하는 핵심 요소이다. 브로커는 여러 개로 구성될 수 있으며, 데이터의 분산 및 복제 작업을 수행한다.
  3. Kafka UI 및 관리 도구: 메시지 상태 확인, 클러스터 관리, 토픽 모니터링 등의 작업을 위한 웹 기반 인터페이스를 제공한다.

2. Docker Compose 파일 구성

다음은 Kafka 클러스터를 Docker Compose로 구성한 예시이다.

version: '3'
services:
  zookeeper:
    image: 'bitnami/zookeeper:3.7.2'
    container_name: zookeeper
    ports:
      - 2181:2181
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
    volumes:
      - ./.data/zookeeper/data:/bitnami/zookeeper/data
      - ./.data/zookeeper/datalog:/bitnami/zookeeper/datalog
      - ./.data/zookeeper/logs:/bitnami/zookeeper/logs
  kafka1:
    image: 'bitnami/kafka:3.6.0'
    container_name: kafka1
    ports:
      - 19092
      - "9092:9092"
    environment:
      - KAFKA_BROKER_ID=1
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_LISTENERS=CLIENT://:19092,EXTERNAL://:9092
      - KAFKA_CFG_ADVERTISED_LISTENERS=CLIENT://kafka1:19092,EXTERNAL://localhost:9092
      - KAFKA_INTER_BROKER_LISTENER_NAME=CLIENT
    depends_on:
      - zookeeper
    volumes:
      - ./.data/kafka1:/bitnami/kafka/data
  kafka2:
    image: 'bitnami/kafka:3.6.0'
    container_name: kafka2
    ports:
      - 19092
      - "9093:9093"
    environment:
      - KAFKA_BROKER_ID=2
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_LISTENERS=CLIENT://:19092,EXTERNAL://:9093
      - KAFKA_CFG_ADVERTISED_LISTENERS=CLIENT://kafka2:19092,EXTERNAL://localhost:9093
      - KAFKA_INTER_BROKER_LISTENER_NAME=CLIENT
    depends_on:
      - zookeeper
    volumes:
      - ./.data/kafka2:/bitnami/kafka/data
  kafka3:
    image: 'bitnami/kafka:3.6.0'
    container_name: kafka3
    ports:
      - 19092
      - "9094:9094"
    environment:
      - KAFKA_BROKER_ID=3
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_LISTENERS=CLIENT://:19092,EXTERNAL://:9094
      - KAFKA_CFG_ADVERTISED_LISTENERS=CLIENT://kafka3:19092,EXTERNAL://localhost:9094
      - KAFKA_INTER_BROKER_LISTENER_NAME=CLIENT
    depends_on:
      - zookeeper
    volumes:
      - ./.data/kafka3:/bitnami/kafka/data
  kafka-ui:
    image: 'provectuslabs/kafka-ui:v0.7.1'
    container_name: kafka-ui
    ports:
      - "8081:8080"
    environment:
      - KAFKA_CLUSTERS_0_NAME=local
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka1:19092,kafka2:19092,kafka3:19092
    depends_on:
      - kafka1
      - kafka2
      - kafka3

이 예시는 Zookeeper 1개와 Kafka 브로커 3개로 클러스터를 구성하며, Kafka UI를 추가하여 클러스터의 상태를 시각적으로 확인할 수 있도록 한다.


3. 주요 설정 항목

  • KAFKA_CFG_ZOOKEEPER_CONNECT: Zookeeper의 연결 정보를 지정한다. 여기서는 zookeeper:2181로 설정된다.
  • KAFKA_CFG_LISTENERSKAFKA_CFG_ADVERTISED_LISTENERS: 클라이언트와 브로커 간 통신을 위한 리스너와 광고용 주소를 설정한다.
  • KAFKA_BROKER_ID: 각 Kafka 브로커의 고유 ID를 나타낸다. 이를 통해 브로커를 구분할 수 있다.

4. 실행 및 확인

  1. Docker Compose 파일이 위치한 디렉토리에서 다음 명령어를 실행한다.
  2. docker-compose up -d

  1. 실행이 완료되면 Zookeeper와 Kafka 브로커 3개, Kafka UI가 컨테이너로 실행된다.

  1. Kafka UI는 브라우저에서 http://localhost:8081로 접근하여 확인할 수 있다.

 


5. 결론

Docker Compose를 활용하면 Kafka 클러스터를 간편하게 구성하고 테스트 환경을 구축할 수 있다. 특히, UI 도구를 활용하면 클러스터의 상태를 쉽게 모니터링할 수 있어 운영 중 발생할 수 있는 문제를 사전에 예방할 수 있다. 그리고 인터넷에 떠도는 것들 중에 amd64로 구성된 것이 많은데, 이 yml 하나면 간단하게! 카프카를 띄우고 실습해 볼 수 있어서 아주 좋다.

댓글