엔지니어 블로그

[DataStreaming] 2.환경 구축(kafka) 본문

개인 프로젝트/Data Streaming 프로젝트

[DataStreaming] 2.환경 구축(kafka)

안기용 2025. 4. 7. 17:00

GCP에 Kafka 3노드 클러스터 구축하기 (Terraform + Manual 설치)

이번 프로젝트에서는 GCP 인스턴스를 활용해 Kafka 클러스터를 직접 구축해보았습니다. Terraform을 이용해 인프라를 구성하고, 각 인스턴스에 Kafka를 수동으로 설치하여 3개의 브로커로 구성된 Kafka 클러스터 환경을 만들었습니다.

1. 인프라 사양 및 구성

인프라는 다음과 같은 사양으로 구성했습니다. 무료 크레딧을 활용할 수 있었기 때문에 쾌적한 개발 환경을 위해 다소 여유 있는 스펙을 선택했습니다. Terraform을 이용해 GCP에 VM 인스턴스를 생성했습니다.

  • Type: e2-standard-4
  • vCPU: 4
  • Memory: 16GB
  • Node 수: 3

2. Kafka 설치 및 설정 (각 노드에서 진행)

  1. Java 설치
    sudo apt-get install openjdk-8-jdk -y
  2. Kafka 다운로드 및 환경 변수 설정
    
    wget https://downloads.apache.org/kafka/3.2.3/kafka_2.12-3.2.3.tgz
    tar xzf kafka_2.12-3.2.3.tgz
    echo 'export KAFKA_HOME=/home/ubuntu/kafka_2.12-3.2.3' >> ~/.bashrc
    source ~/.bashrc
        
  3. Kafka 설정 (각 노드별 server.properties 수정)
    아래 설정은 각 노드에서 각각 수정해줍니다. 예시는 node.id 1번 기준입니다.
    
    node.id=1
    controller.quorum.voters=1@NODE1_IP:9093,2@NODE2_IP:9093,3@NODE3_IP:9093
    num.partitions=3
    advertised.listeners=PLAINTEXT://NODE1_IP:9092
        
    나머지 노드도 node.id와 IP 주소를 알맞게 수정합니다.
  4. 클러스터 ID 생성 및 설정
    클러스터 ID는 하나만 생성하고, 모든 노드에 동일하게 적용합니다.
    
    export KAFKA_CLUSTER_ID="$($KAFKA_HOME/bin/kafka-storage.sh random-uuid)"
        
  5. log.dirs 포맷
    Kafka는 log.dirs에 메타데이터를 저장하므로, 포맷을 먼저 진행해야 합니다.
    
    $KAFKA_HOME/bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c $KAFKA_HOME/config/kraft/server.properties
        
  6. JVM Heap 설정
    메모리가 16GB이므로 Heap 사이즈를 넉넉히 설정했습니다.
    
    export KAFKA_HEAP_OPTS="-Xmx15G -Xms15G"
        

3. Kafka 클러스터 실행 및 테스트

Kafka 설치가 완료되었으므로 이제 테스트를 진행합니다.

1) 토픽 생성


$KAFKA_HOME/bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server 0.0.0.0:9092

2) Producer 실행 (Node 1)


$KAFKA_HOME/bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092

3) Consumer 실행 (Node 2)


$KAFKA_HOME/bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092

Producer에서 메시지를 입력하면 Consumer에서 정상적으로 수신되는지 확인할 수 있습니다.

4) 결과

좌측의 Producer가 발행한 메시지가 메시지가 우측의 Consumer에 잘 전달 되었습니다. 

마무리

이번 작업을 통해 GCP 위에 Kafka 클러스터를 직접 구성하는 경험을 할 수 있었습니다. Terraform을 통한 인프라 자동화, 수동 설정을 통한 Kafka 클러스터 구성 과정을 통해 Kafka의 내부 구조와 설정 방식에 대한 이해도를 높일 수 있었습니다.

다음 단계로는 Kafka에 데이터를 지속적으로 발행하고, 이를 실시간으로 분석하는 스트리밍 파이프라인을 구성해볼 예정입니다.