본문 바로가기
카테고리 없음

[Docker] Zookeeper와 Kafka 설치 및 연동 가이드: Docker Compose로 간편하게 설정하기

by JustJunsu 2024. 11. 10.

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를 설치하여 실시간 분산 메시징 시스템을 구축하고, 다양한 데이터를 안정적으로 처리할 수 있습니다.