Apache Kafka는 대용량 데이터 스트림을 안정적으로 처리하는 메시지 브로커로, 다양한 서비스에서 실시간 데이터 처리에 널리 사용됩니다. Kafka가 안정적으로 작동하기 위해서는 Zookeeper와의 연동이 필수입니다. Zookeeper는 Kafka 클러스터의 상태와 각 브로커를 관리하여 장애에 대비하고 효율적인 분산 처리를 지원합니다. 이 포스팅에서는 Docker Compose를 사용하여 Zookeeper와 Kafka를 설치하고 연동하는 방법을 단계별로 설명하겠습니다.
1. Zookeeper와 Kafka란?
- Zookeeper는 Kafka 클러스터의 상태를 모니터링하고, 장애 발생 시 빠르게 리더 브로커를 재할당하는 등 클러스터의 안정성을 유지해주는 역할을 합니다.
- Kafka는 대용량 데이터의 송수신을 관리하며, Zookeeper와 연동되어 분산 메시징 시스템의 핵심적인 역할을 수행합니다. Zookeeper의 도움으로 Kafka 클러스터는 효율적이고 안전하게 데이터를 처리할 수 있습니다.
2. Zookeeper와 Kafka 설치 준비하기
Docker Compose를 활용하면 Zookeeper와 Kafka를 쉽게 설치하고 연동할 수 있습니다. 설치 전 Docker와 Docker Compose가 설치되어 있어야 합니다.
2.1 Docker Compose 파일 생성하기
프로젝트 폴더에 docker-compose.yml 파일을 생성하고, 아래 설정을 추가합니다.
version: '3'
services:
zookeeper:
image: zookeeper:3.6
container_name: zookeeper
ports:
- "2181:2181"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
kafka:
image: wurstmeister/kafka
container_name: kafka
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
KAFKA_LOG_DIRS: "/kafka/logs"
위 설정은 Zookeeper와 Kafka가 서로 연결되도록 구성된 예제입니다. KAFKA_ZOOKEEPER_CONNECT에서 Kafka가 Zookeeper와 연결되도록 설정되어 있습니다.
2.2 Docker Compose 실행하기
터미널에서 아래 명령어를 실행하여 Docker Compose 파일에 정의된 서비스들을 시작합니다.
docker-compose up -d
3. Kafka와 Zookeeper 연동 설정
Zookeeper와 Kafka의 컨테이너가 정상적으로 실행되면, Kafka가 Zookeeper와 연동되어 데이터를 관리할 수 있게 됩니다.
- Kafka 설정 파일 확인: Kafka의 server.properties 파일에서 zookeeper.connect 옵션이 올바르게 설정되어 있는지 확인합니다.
zookeeper.connect=zookeeper:2181
이 설정은 Kafka가 Zookeeper와 통신하는 포트를 정의한 것입니다.
4. Kafka 실행 및 테스트
이제 Kafka와 Zookeeper가 정상적으로 연동되었는지 간단히 테스트해 보겠습니다.
Step 1: Kafka 서버가 정상적으로 실행되었는지 확인합니다.
docker logs kafka
로그에서 오류가 발생하지 않고 Kafka가 성공적으로 시작되었는지 확인합니다.
Step 2: Kafka 토픽 생성
터미널에서 아래 명령어를 통해 테스트용 토픽을 생성합니다.
docker exec -it kafka kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092
Step 3: Producer와 Consumer 테스트
테스트 토픽에서 메시지 송수신을 테스트해 보겠습니다.
- Producer 시작:
docker exec -it kafka kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
Producer 터미널에서 메시지를 입력합니다.
- Consumer 시작:
docker exec -it kafka kafka-console-consumer.sh --topic test-topic --bootstrap-server localhost:9092 --from-beginning
Consumer 터미널에서 Producer가 입력한 메시지가 출력되면, Kafka와 Zookeeper가 정상적으로 연동되어 작동하는 것입니다.
5. 결론
이 포스팅에서는 Docker Compose를 사용하여 Zookeeper와 Kafka를 설치하고 연동하는 방법을 살펴보았습니다. Zookeeper는 Kafka의 안정성을 유지하고 브로커 간의 장애를 관리하여 데이터 손실을 방지하는 중요한 역할을 합니다. 이 가이드대로 Kafka와 Zookeeper를 설치하여 실시간 분산 메시징 시스템을 구축하고, 다양한 데이터를 안정적으로 처리할 수 있습니다.
'Docker' 카테고리의 다른 글
[Docker] NGINX란? Docker와 FastAPI를 활용한 서버 구축 실습 (6) | 2024.11.17 |
---|---|
Docker를 이용한 ChromaDB와 데이터 생성 컨테이너 연동하기 (2) | 2024.11.15 |
[Docker] Docker와 PostgreSQL을 이용한 데이터 생성 시스템 구축하기 (2) | 2024.10.06 |
[Docker] DockerFile 명령어 정리: ADD, COPY, CMD, ENTRYPOINT, ARG, ENV 등 (6) | 2024.09.25 |
[Docker] Ubuntu 22.04 환경에서 도커 설치하기 (0) | 2024.09.23 |