728x90
Docker Compose를 이용한 Kafka 클러스터 구성
Kafka는 분산 메시징 시스템으로, 데이터 스트리밍 처리에 널리 사용된다. 이 글에서는 Docker Compose를 활용하여 Zookeeper와 Kafka 브로커 3개로 구성된 로컬 환경을 구축하는 방법을 다룬다. 또한, Kafka UI 및 관리 도구를 포함하여 운영 환경을 시뮬레이션할 수 있는 구성 방법도 설명한다.
1. Kafka 클러스터 개요
Kafka 클러스터는 일반적으로 다음과 같은 구성 요소를 포함한다.
- Zookeeper: Kafka 브로커들의 메타데이터를 관리하며 클러스터의 상태를 조율한다.
- Kafka 브로커: 메시지를 저장하고 클라이언트로부터의 요청을 처리하는 핵심 요소이다. 브로커는 여러 개로 구성될 수 있으며, 데이터의 분산 및 복제 작업을 수행한다.
- 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_LISTENERS
및KAFKA_CFG_ADVERTISED_LISTENERS
: 클라이언트와 브로커 간 통신을 위한 리스너와 광고용 주소를 설정한다.KAFKA_BROKER_ID
: 각 Kafka 브로커의 고유 ID를 나타낸다. 이를 통해 브로커를 구분할 수 있다.
4. 실행 및 확인
- Docker Compose 파일이 위치한 디렉토리에서 다음 명령어를 실행한다.
docker-compose up -d
- 실행이 완료되면 Zookeeper와 Kafka 브로커 3개, Kafka UI가 컨테이너로 실행된다.
- Kafka UI는 브라우저에서
http://localhost:8081
로 접근하여 확인할 수 있다.
5. 결론
Docker Compose를 활용하면 Kafka 클러스터를 간편하게 구성하고 테스트 환경을 구축할 수 있다. 특히, UI 도구를 활용하면 클러스터의 상태를 쉽게 모니터링할 수 있어 운영 중 발생할 수 있는 문제를 사전에 예방할 수 있다. 그리고 인터넷에 떠도는 것들 중에 amd64로 구성된 것이 많은데, 이 yml 하나면 간단하게! 카프카를 띄우고 실습해 볼 수 있어서 아주 좋다.
'DevOps > Kafka' 카테고리의 다른 글
Java-Gradle Kafka 환경 설정하기 (1) | 2025.01.22 |
---|---|
[카프카] 트랜잭션 프로듀서와 트랜잭션 컨슈머 (0) | 2024.09.17 |
[카프카] 멱등성(idempotence) 프로듀서란? (2) | 2024.09.17 |
[CCDAK] Confluent Developer for Apache Kafka 2024 대비하기 (1) | 2024.09.17 |
[카프카 퀴즈] 카프카 cli 퀴즈 (0) | 2024.07.02 |
댓글