엔지니어 블로그
[DataStreaming] 2.환경 구축(kafka) 본문
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 설치 및 설정 (각 노드에서 진행)
- Java 설치
sudo apt-get install openjdk-8-jdk -y
- 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
- Kafka 설정 (각 노드별 server.properties 수정)
아래 설정은 각 노드에서 각각 수정해줍니다. 예시는 node.id 1번 기준입니다.
나머지 노드도 node.id와 IP 주소를 알맞게 수정합니다.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
- 클러스터 ID 생성 및 설정
클러스터 ID는 하나만 생성하고, 모든 노드에 동일하게 적용합니다.export KAFKA_CLUSTER_ID="$($KAFKA_HOME/bin/kafka-storage.sh random-uuid)"
- log.dirs 포맷
Kafka는 log.dirs에 메타데이터를 저장하므로, 포맷을 먼저 진행해야 합니다.$KAFKA_HOME/bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c $KAFKA_HOME/config/kraft/server.properties
- 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에 데이터를 지속적으로 발행하고, 이를 실시간으로 분석하는 스트리밍 파이프라인을 구성해볼 예정입니다.
'개인 프로젝트 > Data Streaming 프로젝트' 카테고리의 다른 글
[DataStreaming] 1.프로젝트 소개 (0) | 2025.04.05 |
---|