kafka

[Kafka] Kafka 개념 및 기초 학습

JABHACK 2025. 2. 3. 20:30

Kafka 개념 및 기초 학습

Kafka를 학습하는 첫 단계로, Kafka가 무엇인지, 기존 메시지 큐와의 차이점, 기본적인 아키텍처 및 메시지 처리 방식을 이해하는 것이 중요합니다.
아래 내용을 따라가며 하나씩 익혀보세요.


📌 1. Kafka란 무엇인가? 어떤 문제를 해결하는가?

🔹 Kafka의 정의

Apache Kafka대량의 데이터를 빠르고 안정적으로 처리할 수 있는 분산 메시징 시스템입니다.
Pub/Sub(발행-구독) 모델을 기반으로 하며, 실시간 데이터 스트리밍과 로그 수집, 데이터 파이프라인 구축 등에 사용됩니다.

🔹 Kafka가 해결하는 문제

  • 대량의 데이터 처리
    • 기존 메시지 큐(RabbitMQ, ActiveMQ)로는 수천만 개 이상의 메시지를 처리하기 어려움
  • 실시간 데이터 스트리밍
    • Kafka는 이벤트 기반 시스템으로 실시간 분석 및 데이터 처리 가능
  • 확장성 문제 해결
    • Kafka는 분산 아키텍처 기반으로 확장성이 뛰어남
  • 데이터 손실 최소화
    • 디스크 기반 로그 저장을 사용하여 장애 발생 시 데이터 유실을 최소화

📌 2. Kafka vs 메시지 큐(RabbitMQ, ActiveMQ)

비교 항목 Kafka RabbitMQ / ActiveMQ
데이터 처리 모델 Pub/Sub (스트리밍 중심) 큐 기반 (비동기 메시징)
메시지 저장 방식 디스크 로그 기반 저장 (장기 보관 가능) 메시지 소모 후 삭제
확장성 분산 시스템 (수평 확장 용이) 노드 추가 시 관리 복잡
사용 사례 실시간 데이터 분석, 로그 수집, 이벤트 스트리밍 요청-응답 비동기 메시징
메시지 소비 방식 Consumer Group 활용 (병렬 처리 가능) 1:1 혹은 Pub/Sub 모델
메시지 순서 보장 Partition 단위에서 순서 유지 일반적으로 순서 보장 없음
성능 초당 수백만 TPS 가능 수십만 TPS 수준
내구성 (Durability) 디스크에 저장하여 복구 가능 메시지 소비 후 삭제

📌 결론:

  • Kafka고성능, 확장성, 실시간 데이터 처리가 필요한 경우 유리
  • RabbitMQ, ActiveMQ는 단순한 비동기 메시징(예: 주문 처리, 트랜잭션 큐) 용도로 적합

📌 3. Kafka 아키텍처 (Broker, Producer, Consumer, Topic, Partition, Offset)

Kafka는 분산 아키텍처로 동작하며, 주요 구성 요소는 다음과 같습니다.

🔹 Kafka의 주요 구성 요소

구성 요소 설명

구성 요소 설명
Broker Kafka 서버 역할 (메시지 저장 및 관리)
Producer 메시지를 Kafka에 전송하는 클라이언트
Consumer 메시지를 구독(소비)하는 클라이언트
Topic 메시지가 저장되는 논리적 공간 (카테고리)
Partition Topic을 나누어 여러 Broker에 분산 저장
Offset 메시지의 고유한 위치 (Consumer가 어디까지 읽었는지 저장)

🔹 Kafka 데이터 흐름

  1. ProducerTopic에 메시지를 전송
  2. Topic은 여러 개의 Partition으로 나뉘어 저장됨
  3. Broker가 Partition을 관리하고 데이터 저장
  4. Consumer는 특정 Topic을 구독하여 메시지를 가져감
  5. 메시지의 위치(Offset)를 사용하여 데이터를 추적

🔹 Kafka 구조 예시

Producer → [ Kafka Topic (Partition 0, 1, 2) ] → Consumer Group
  • Producer가 메시지를 Kafka Topic에 전송
  • Topic은 여러 개의 Partition으로 나뉘어 Broker에 분산 저장
  • Consumer Group이 메시지를 읽고 처리

📌 4. 메시지 처리 방식 (Pub/Sub 모델 및 Consumer Group)

Kafka는 Pub/Sub(발행-구독) 모델을 사용합니다.

🔹 Pub/Sub 모델 (Publish-Subscribe)

  • Producer가 메시지를 Topic에 게시
  • 여러 개의 Consumer가 메시지를 구독 가능
  • Consumer Group을 활용하여 메시지를 병렬로 처리 가능

🔹 Consumer Group 활용

Kafka에서는 Consumer Group을 사용하여 메시지를 효과적으로 분산 처리합니다.

Consumer Group 방식 설명
Single Consumer 하나의 Consumer가 모든 메시지를 소비
Multiple Consumers 여러 개의 Consumer가 각기 다른 Partition을 소비
Consumer Group 여러 Consumer가 하나의 그룹으로 묶여 병렬 처리

예시

  • Topic에 3개의 Partition이 있고, **2개의 Consumer(C1, C2)**가 있다면:
    • C1이 Partition 0, 1을 소비
    • C2가 Partition 2를 소비

장점: Consumer Group을 사용하면 부하를 분산하여 처리 속도를 향상할 수 있습니다.


📌 5. Kafka 설치 및 실행 (로컬 & Docker)

Kafka를 실습하려면 직접 설치하고 실행해보는 것이 중요합니다.

🔹 Kafka 로컬 설치 (Zookeeper 포함)

# Kafka 다운로드
wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz
tar -xzf kafka_2.13-3.6.0.tgz
cd kafka_2.13-3.6.0

# Zookeeper 실행
bin/zookeeper-server-start.sh config/zookeeper.properties &

# Kafka 실행
bin/kafka-server-start.sh config/server.properties &

🔹 Docker로 Kafka 실행

docker-compose up -d

📌 Docker-Compose 예시 파일

version: '3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"

  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092

📌 6. 기본 CLI 명령어 (Topic 생성, 메시지 전송 및 소비 테스트)

Kafka의 기본 명령어를 사용하여 직접 테스트해봅니다.

🔹 Topic 생성

bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1

🔹 Producer 메시지 전송

bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
> Hello Kafka!  # 메시지 입력 후 Enter

🔹 Consumer 메시지 수신

bin/kafka-console-consumer.sh --topic test-topic --bootstrap-server localhost:9092 --from-beginning

출력 예시:
Hello Kafka!


✅ 정리

주제 요약
Kafka 개념 대량 데이터 처리, 실시간 스트리밍을 위한 분산 메시징 시스템
Kafka vs 메시지 큐 메시지 큐(RabbitMQ)보다 확장성과 성능이 뛰어남
Kafka 아키텍처 Producer → Topic(Partition) → Consumer Group 구조
Pub/Sub 모델 다수의 Consumer가 메시지를 병렬 처리 가능
Kafka 설치 로컬 또는 Docker로 쉽게 실행 가능
CLI 테스트 Topic 생성, 메시지 전송 및 소비

 

Kafka의 기본 개념과 동작 방식이 이해되었다면, 이제 실제 애플리케이션과 연동하는 방법을 학습하면 좋습니다! 🚀