Docker

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

JustJunsu 2024. 11. 10. 17:25
728x90

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

728x90