Introduction
Kafka는 분산 스트리밍 플랫폼으로, 실시간 데이터 스트리밍을 위한 시스템입니다. 이 글에서는 GCP Dataproc을 사용하여 3개의 노드로 구성된 Kafka 클러스터를 설정하고, 이를 테스트하는 과정을 설명하겠습니다. 또한 Kafka와 함께 사용하는 Zookeeper의 역할에 대해서도 간략히 다룹니다.
Kafka는 데이터 파이프라인을 만들고, 실시간 이벤트 처리를 지원하며, 대규모 분산 시스템에서 데이터를 효율적으로 처리할 수 있습니다.
Kafka의 주요 구성 요소:
- Producer: 데이터를 생성하여 Kafka 토픽에 전송하는 역할을 합니다.
- Consumer: Kafka 토픽으로부터 데이터를 읽어와 처리하는 역할을 합니다.
- Broker: Kafka의 서버로, 데이터를 수신하고 저장하며, Producer와 Consumer 간의 메시지를 전달하는 역할을 합니다.
- Topic: Kafka에서 데이터를 구분하는 논리적인 단위입니다. 데이터를 특정 토픽에 보내면, 그 토픽을 구독한 Consumer가 데이터를 처리합니다.
- Partition: 각 Topic은 여러 Partition으로 나눠져 데이터를 분산 저장하고 병렬 처리를 가능하게 합니다.
Zookeeper는 분산 시스템을 위한 중앙 집중식 서비스로, 데이터의 동기화와 관리, 분산 시스템의 상태를 관리하는 역할을 합니다.
Zookeeper의 주요 기능:
- 클러스터 관리: Zookeeper는 Kafka 클러스터의 각 브로커(서버)의 상태를 추적하고, 브로커가 장애를 일으켰을 때 자동으로 복구하는 기능을 제공합니다.
- 리더 선출: Kafka는 각 Partition에 대해 하나의 리더를 선출하는데, 이 과정에서 Zookeeper가 리더 선출을 관리합니다.
- 메타데이터 관리: Zookeeper는 Kafka의 메타데이터(토픽, 파티션, 리더 등)를 관리하여 클러스터의 일관성을 유지합니다.
How to install multi node kafka cluster
1. GCP Dataproc을 이용하여 3개의 Mutli node kafka cluster 생성
2. Kafka 및 Zookeeper 설치
wget https://downloads.apache.org/kafka/2.1.0/kafka_2.11-2.1.0.tgz
tar -xvzf kafka_2.11-2.1.0.tgz
cd kafka_2.11-2.1.0


3. Kafka 브로커 설정
Kafka 브로커가 Zookeeper와 통신하도록 설정합니다.

각 노드에서 Kafka를 시작합니다.

4. 클러스터 테스트 및 검증
1) Create topic
Kafka에서 토픽을 생성할 때, kafka-topics.sh 명령어를 사용합니다. 이 명령어로 my-test-topic과 같은 새로운 토픽을 생성할 수 있습니다.

Kafka의 기본 동작은 Producer가 메시지를 Topic에 전송하고, Consumer는 해당 Topic을 구독하여 메시지를 받아서 처리하는 방식입니다. 메시지가 실제로 Producer에서 Consumer로 전달되는지 확인하려면 다음과 같은 절차를 따릅니다.
2) Produce message to topic
사용자가 입력한 메시지는 my-test-topic으로 전송됩니다. 예를 들어, "hello"와 같은 메시지를 입력하면 그 메시지가 Kafka의 my-test-topic에 저장됩니다.

3) Consume message from topic
Consumer는 아래 명령어로 실행하여, my-test-topic에서 메시지를 읽어옵니다. Producer에서 메시지를 입력하고 Consumer가 이를 받으면, Consumer 터미널에서 해당 메시지가 출력됩니다. 예를 들어, Producer에서 "Hello Kafka"라는 메시지를 보냈다면, Consumer에서는 "Hello Kafka"라는 메시지가 출력됩니다.

My Review
멀티 노드 Kafka 클러스터의 장점으로는 분산 시스템의 확장성, 고가용성, 내결함성을 크게 향상 시킬 수 있다고합니다.
- 확장성 (Scalability): 여러 노드에서 데이터를 분산 처리하므로, 시스템 부하가 커져도 손쉽게 클러스터를 확장할 수 있습니다. 필요에 따라 새로운 노드를 추가하여 처리 성능을 향상시킬 수 있습니다.
- 고가용성 (High Availability): 복제 기능을 통해 데이터 손실을 방지하고, 장애가 발생한 노드를 자동으로 복구할 수 있습니다. 이는 실시간 데이터 스트리밍을 요구하는 환경에서 매우 중요한 요소입니다.
- 내결함성 (Fault Tolerance): Kafka는 데이터를 여러 노드에 복제하여 저장하므로, 특정 노드가 실패하더라도 시스템은 정상적으로 동작할 수 있습니다. Zookeeper는 클러스터 상태를 모니터링하고, 장애 발생 시 빠르게 복구 작업을 수행합니다.
이러한 장점 덕분에 Kafka는 대규모 데이터 스트리밍 시스템에서 필수적인 역할을 합니다. 예를 들어, 금융 서비스에서는 실시간 거래 데이터를 처리하고, 소셜 미디어 플랫폼에서는 사용자의 활동 데이터를 실시간으로 분석하는 데 유용합니다. Kafka는 이러한 환경에서 실시간 데이터 처리와 안정적인 메시징 시스템을 제공하며, 멀티 노드 클러스터 구성을 통해 더욱 효율적인 데이터 파이프라인을 구축할 수 있습니다.
'과제' 카테고리의 다른 글
| [Kafka] Spark와 Kafka로 실시간 비트코인 해시태그 분석 : Spark Structured Streaming (2) | 2024.12.27 |
|---|---|
| [Kafka] Spark와 Kafka로 실시간 비트코인 해시태그 분석 : RDD 활용 (3) | 2024.12.08 |
| [Spark] RDD 를 이용한 Page Rank 구현 (2) | 2024.07.01 |
| [Project] Make K-means Clustering Program (0) | 2023.09.02 |
| [Project] Finding frequent item sets (1) | 2023.07.31 |