[Kafka] Kafka 기본 개념 이해하기

 

Kafka는 대규모 실시간 데이터 스트리밍을 위한 대표적인 분산 메시지 큐 시스템입니다. 이번 포스팅에서는 Kafka의 기본 개념과 구성 요소 등을 살펴보며 Kafka가 왜 실시간 데이터 처리 플랫폼으로 각광받는지 알아봅시다.

 

1. Kafka Overview

1.1 Kafka의 주요 기능

Kafka는 다음과 같은 특징을 가진 분산 메시지 큐 시스템입니다:

  1. Pub/Sub 모델을 지원하는 구조로 데이터를 생산하는 Publisher와 소비하는 Consumer라고 하는 subscriber로 데이터를 관리하고 처리
  2. 여러 대의 서버로 구성된 클러스터 기반 아키텍처를 통해 수평 확장 가능
  3. Topic 단위로 데이터를 관리하며, Topic은 여러 개의 Partition으로 구성 가능
  4. High throughput, Low latency 환경에서도 안정적으로 작동
    * throughput = 처리량, latency = 처리 속도

 

1.2 Kafka가 해결하는 문제

Kafka는 다음과 같은 문제를 해결하기 위해 설계되었습니다:

  1. 기존 메시지 큐(RabbitMQ 등)의 확장성 한계를 극복
  2. 클러스터 기반으로 고가용성(HA), 장애 허용성(Fault Tolerance) 제공
  3. Topic/Partition/Offset/Producer/ConsumerGroup 등의 개념으로 신뢰성 있는 대용량 메시지 처리 구현
  4. 빠른 데이터 처리와 유연한 분산 환경 지원

 

1.3 이벤트 스트리밍 플랫폼으로서의 Kafka

Kafka는 단순한 메시지 큐를 넘어, 이벤트 스트리밍 플랫폼으로 발전하고 있습니다. 이는 다음과 같은 요소를 포함합니다:

  • 다양한 소스에서 수집되는 이벤트 처리
  • 초당 수 GB 이상 데이터 처리 가능
  • Kafka Streams, Kafka Connect 등의 API를 통한 스트리밍 처리와 시스템 간 통합

 

2. Kafka 구성 요소

2.1 Kafka 서버 및 클라이언트 구조

Kafka는 고성능 TCP 기반의 네트워크 통신을 사용하는 서버-클라이언트 분산 시스템입니다.

  • 서버 (Broker): Kafka 클러스터를 구성하며, 각 브로커는 토픽 데이터를 저장합니다. Kafka Connect를 통해 외부 시스템과 연결할 수 있습니다.
  • 클라이언트: 다양한 언어(Java, Python, Go 등)의 클라이언트를 통해 메시지를 생산하거나 소비할 수 있습니다. 네트워크 오류 발생 시에도 고가용성을 유지하며 이벤트를 처리합니다.

 

2.2 Kafka의 핵심 개념

이벤트(Event)

Kafka에서 주고받는 기본 단위. '레코드' 또는 '메시지'라고도 하며 다음과 같은 요소로 구성됩니다:

  • Key: 이벤트의 식별자 (예: 사용자 ID)
  • Value: 데이터 본문 (예: "1,000원 입금")
  • Timestamp: 발생 시간 (예: 2023년 2월 1일 오전 2시 30분)

Producer와 Consumer

프로듀서와 컨슈머는 모두 Kafka 클라이언트이며 다음과 같은 역할을 합니다.

  • Producer: Kafka로 데이터를 발행하는 주체
  • Consumer: Kafka에서 데이터를 소비하는 주체

Kafka의 비동기 구조(프로듀서는 컨슈머가 메시지를 수신하는 것을 기다릴 필요 없음) 덕분에 Producer와 Consumer는 독립적으로 동작하며, 이는 높은 확장성의 핵심입니다.

 

2.3 Kafka의 토픽

Topic

  • 이벤트를 분류하고 저장하는 단위
  • 여러 Producer/Consumer가 하나의 Topic을 사용 가능
  • 메시지는 소비 후에도 유지되며, 여러 번 재처리 가능 (유지 기간 따로 설정 가능)

Partition

  • Topic을 구성하는 물리적 저장 단위
  • 각 Partition은 별도의 로그(이벤트 레코드)를 가지며, 병렬 처리와 확장성 향상에 기여

Offset

  • Partition 내에서 각 이벤트의 고유 번호
  • Offset 값의 순서는 파티션 내에서만 보장
  • Kafka는 Offset을 기준으로 메시지를 추적 및 재처리할 수 있게 함

 

2.4 Kafka 브로커(Broker)

Kafka 클러스터는 하나 이상의 브로커 서버(Broker)로 구성됩니다.

 

  • 각 브로커는 여러 토픽과 파티션을 저장
  • 브로커들은 전체 클러스터 정보를 공유하며, 연결된 하나의 브로커를 통해 전체 클러스터와 통신 가능
  • 특정 브로커가 모든 데이터 저장을 담당하지 않음 (데이터는 분산 저장)

 

예: Topic-x는 3개의 파티션을 갖고 있으며, 이는 Broker 1, 2, 3에 분산 저장될 수 있습니다.

 

2.5 Kafka 클라이언트 API

Kafka는 다양한 클라이언트 API를 제공합니다:

  • Producer API: Kafka로 데이터를 전송
  • Consumer API: Kafka에서 데이터를 수신
  • Streams API: Kafka 내부에서 스트림 데이터를 실시간 처리 (고수준 API - SQL Join, Cache ... 여러 기능 제공)
  • Connector API: 외부 시스템(RDBMS, Elasticsearch 등)과 Kafka 간 데이터 연동

 

 

마무리: Kafka를 왜 선택하는가?

 

Kafka는 단순한 메시지 큐를 넘어 데이터 중심의 아키텍처를 가능하게 하는 이벤트 스트리밍 플랫폼입니다. 높은 확장성, 탄탄한 내결함성, 다양한 클라이언트 및 통합 API를 통해 데이터 중심의 마이크로서비스 및 빅데이터 처리에 최적화된 솔루션입니다.

이 글에서 다룬 Kafka의 핵심 개념과 구조를 이해하고 나면, 실제 Kafka 클러스터를 구축하거나, 스트리밍 파이프라인을 구성할 때 큰 도움이 될 것입니다. 다음 글에서는 Kafka 설치 및 실습 환경 구성에 대해 자세히 소개하겠습니다.