카프카, 왜 알아야 할까요? - 데이터 파이프라인 혁명의 시작

1장. 카프카란 무엇인가#

1.1 들어가며: 데이터 홍수 시대, 데이터 흐름의 중요성#

21세기는 데이터의 시대입니다. 스마트폰, 소셜 미디어, IoT 기기, 웹 서비스와 다양한 디지털 시스템이 끊임없이 데이터를 생성하고 있습니다. 기업이 처리해야 하는 데이터의 양과 종류, 발생 속도 역시 빠르게 증가하고 있습니다.

하지만 데이터는 단순히 많이 수집하고 저장한다고 해서 가치가 생기는 것은 아닙니다. 데이터를 적절하게 수집하고 전달하며, 필요한 시스템에서 활용할 수 있도록 만드는 데이터 흐름(Data Flow)이 중요합니다.

기업들은 오랫동안 데이터를 데이터베이스나 파일 시스템에 저장하는 데 집중해 왔습니다. 그러나 서비스가 복잡해지고 실시간 데이터 활용이 중요해지면서 다음과 같은 요구가 증가했습니다.

  • 대량의 데이터를 안정적으로 수집해야 합니다.
  • 여러 시스템에 데이터를 전달해야 합니다.
  • 데이터가 발생한 직후 처리할 수 있어야 합니다.
  • 특정 시스템의 장애가 전체 데이터 흐름으로 확산되지 않아야 합니다.
  • 데이터 처리량이 증가하면 시스템을 수평적으로 확장할 수 있어야 합니다.

Apache Kafka는 이러한 데이터 흐름을 구축하기 위한 대표적인 분산 이벤트 스트리밍 플랫폼입니다.

카프카는 데이터를 이벤트(Event) 형태로 기록하고, 여러 생산자와 소비자가 데이터를 비동기적으로 주고받을 수 있도록 합니다. 이를 통해 애플리케이션, 데이터베이스, 분석 시스템, IoT 시스템 등 서로 다른 시스템을 연결하는 데이터 파이프라인을 구축할 수 있습니다.

핵심은 데이터를 단순히 저장하는 것이 아니라, 필요한 곳으로 안정적으로 흐르게 만드는 것입니다.


1.2 데이터 처리 방식의 진화: 배치 처리와 스트림 처리#

데이터 처리 방식은 데이터의 양과 처리 요구사항에 따라 발전해 왔습니다.

대표적인 방식은 배치 처리(Batch Processing)와 스트림 처리(Stream Processing)입니다.

1.2.1 배치 처리#

배치 처리는 데이터를 일정 기간 동안 모은 다음 한꺼번에 처리하는 방식입니다.

예를 들어 하루 동안 발생한 주문 데이터를 밤에 모아서 매출 통계를 생성할 수 있습니다.

데이터 수집
    ↓
데이터 저장
    ↓
일정량 또는 일정 시간 동안 축적
    ↓
한꺼번에 처리
    ↓
결과 생성

배치 처리는 대규모 데이터를 효율적으로 처리하는 데 적합하지만, 데이터가 생성된 직후 결과를 확인해야 하는 상황에서는 적합하지 않을 수 있습니다.

대표적인 활용 사례는 다음과 같습니다.

  • 일별·월별 매출 집계
  • 정기적인 데이터 분석
  • 대규모 데이터 변환
  • 데이터 웨어하우스 적재
  • 정기적인 보고서 생성

1.2.2 스트림 처리#

스트림 처리는 데이터가 지속적으로 발생하는 상황에서 이벤트를 가능한 한 빠르게 처리하는 방식입니다.

이벤트 발생
    ↓
데이터 수집
    ↓
실시간 처리
    ↓
결과 전달

예를 들어 사용자가 온라인 쇼핑몰에서 상품을 조회하거나 주문하면 해당 이벤트를 수집하고, 이를 실시간 추천이나 모니터링 시스템에서 활용할 수 있습니다.

대표적인 활용 사례는 다음과 같습니다.

  • 실시간 로그 분석
  • 사용자 행동 분석
  • 실시간 이상 탐지
  • 이벤트 기반 애플리케이션
  • IoT 데이터 처리
  • 실시간 추천

1.2.3 배치 처리와 스트림 처리 비교#

특징 배치 처리 스트림 처리
처리 방식 데이터를 모아서 처리 발생하는 이벤트를 지속적으로 처리
처리 시점 일정 시간 또는 조건 이후 데이터 발생 직후
지연 시간 상대적으로 높음 상대적으로 낮음
적합한 작업 대규모 집계·분석 실시간 이벤트 처리
대표 사례 일괄 보고서, 데이터 웨어하우스 처리 실시간 분석, 이벤트 처리
대표 기술 Apache Spark, Hadoop Apache Kafka, Apache Flink

카프카는 그 자체가 모든 스트림 처리를 수행하는 것은 아닙니다. 카프카는 이벤트를 안정적으로 수집·저장·전달하는 역할을 하며, 복잡한 스트림 처리는 Kafka Streams, Apache Flink, Spark Streaming 등의 기술과 함께 구성할 수 있습니다.

1.2.4 람다 아키텍처와 카파 아키텍처#

데이터 처리 요구사항이 복잡해지면서 배치 처리와 스트림 처리를 결합하는 다양한 아키텍처가 등장했습니다.

람다 아키텍처(Lambda Architecture)#

람다 아키텍처는 배치 처리와 실시간 처리를 별도의 경로로 구성하는 방식입니다.

                 ┌──→ 배치 처리 ──→
데이터 ──────────┤                  결과
                 └──→ 스트림 처리 ─→

장점은 대규모 과거 데이터를 처리하면서 실시간 결과도 제공할 수 있다는 것입니다.

반면 동일한 데이터를 처리하기 위한 로직이 배치 계층과 스트림 계층에 중복될 수 있어 시스템의 복잡성이 증가할 수 있습니다.

카파 아키텍처(Kappa Architecture)#

카파 아키텍처는 이벤트 스트림을 중심으로 데이터 처리를 구성하고, 필요할 경우 과거 이벤트를 다시 처리하는 방식입니다.

이벤트 스트림
      ↓
   Kafka
      ↓
스트림 처리
      ↓
서비스 / 분석 시스템

카프카는 이벤트를 일정 기간 보존하고 과거 이벤트를 다시 읽을 수 있기 때문에 이러한 이벤트 스트리밍 아키텍처의 기반으로 활용할 수 있습니다.


1.3 기존 데이터 처리 방식의 한계#

카프카가 등장하기 전에도 시스템 간 데이터를 전달하기 위한 다양한 기술이 사용되었습니다.

대표적으로 파일 시스템, 데이터베이스, 전통적인 메시징 시스템 등이 있습니다.

1.3.1 파일 시스템#

파일은 데이터를 저장하고 교환하는 가장 기본적인 방법 중 하나입니다.

하지만 여러 시스템이 실시간으로 데이터를 주고받아야 하는 환경에서는 다음과 같은 문제가 발생할 수 있습니다.

  • 파일 생성 및 관리 작업이 필요합니다.
  • 실시간 데이터 전달이 어렵습니다.
  • 여러 소비자가 동일한 데이터를 독립적으로 처리하기 어렵습니다.
  • 대규모 데이터 흐름을 관리하기 위한 별도의 시스템이 필요합니다.

1.3.2 데이터베이스#

데이터베이스는 데이터를 구조적으로 저장하고 조회하는 데 매우 중요한 역할을 합니다.

하지만 데이터베이스를 모든 시스템 간 데이터 전달의 중심으로 사용하면 다음과 같은 문제가 발생할 수 있습니다.

  • 여러 시스템이 동일한 데이터베이스에 강하게 의존할 수 있습니다.
  • 대량의 이벤트 처리로 데이터베이스에 부하가 증가할 수 있습니다.
  • 시스템 간 결합도가 높아질 수 있습니다.
  • 하나의 데이터 변경을 여러 시스템에 전달하기 위한 별도의 로직이 필요합니다.

따라서 데이터베이스와 메시징 시스템은 서로 대체 관계라기보다 서로 다른 목적을 가진 기술로 보는 것이 적절합니다.

1.3.3 메시지 큐#

메시지 큐는 생산자와 소비자 사이의 비동기 통신을 지원합니다.

이를 통해 생산자가 메시지를 생성하면 소비자가 나중에 메시지를 처리하도록 시스템을 분리할 수 있습니다.

하지만 전통적인 메시지 큐는 일반적으로 작업 메시지를 소비자에게 전달하는 큐잉(Queueing) 모델에 초점을 맞춥니다.

반면 카프카는 이벤트를 로그에 기록하고 일정 기간 보존하며, 여러 소비자가 동일한 이벤트 스트림을 독립적으로 읽을 수 있다는 점에서 차이가 있습니다.

1.3.4 기존 방식과 카프카 비교#

특징 파일 시스템 데이터베이스 전통적인 메시지 큐 Apache Kafka
데이터 저장 가능 가능 제품에 따라 다름 가능
대규모 이벤트 처리 제한적 목적에 따라 다름 가능 강점
실시간 데이터 전달 제한적 가능 강점 강점
여러 소비자 지원 구현 필요 구현 필요 지원 지원
이벤트 장기 보존 파일 관리 필요 가능 제품에 따라 다름 지원
수평 확장 별도 구성 필요 제품·구성에 따라 다름 지원 강점
이벤트 재처리 별도 구현 별도 구현 제품에 따라 다름 오프셋 기반 재처리 가능

카프카는 기존 기술을 완전히 대체하기 위한 기술이라기보다, 대규모 이벤트 스트리밍과 시스템 간 데이터 흐름을 담당하는 별도의 인프라로 이해하는 것이 좋습니다.


1.4 카프카는 어떤 역할을 할까?#

카프카의 핵심 역할은 여러 시스템에서 발생하는 이벤트를 받아 저장하고, 필요한 소비자에게 전달하는 것입니다.

전체적인 데이터 흐름을 단순화하면 다음과 같습니다.

데이터 소스
    ↓
Producer
    ↓
Apache Kafka
    ↓
Consumer
    ↓
데이터베이스 / 검색엔진 / 분석시스템 / 서비스

1.4.1 데이터 수집#

카프카는 애플리케이션 이벤트, 서버 로그, 데이터베이스 변경 이벤트, IoT 데이터 등 다양한 데이터를 이벤트 스트림으로 수집할 수 있습니다.

Kafka Connect를 이용하면 외부 시스템과의 데이터 연동을 구성할 수도 있습니다.

1.4.2 데이터 저장#

카프카는 이벤트를 디스크에 기록하고 설정된 보존 정책에 따라 일정 기간 데이터를 유지합니다.

또한 파티션을 여러 브로커에 분산하고 복제할 수 있어 대규모 이벤트 스트림을 안정적으로 운영할 수 있습니다.

1.4.3 데이터 전달#

생산자가 이벤트를 카프카에 기록하면 여러 소비자가 해당 이벤트를 읽을 수 있습니다.

예를 들어 하나의 주문 이벤트를 다음과 같이 여러 시스템에서 각각 사용할 수 있습니다.

                 ┌→ 주문 처리
주문 이벤트 → Kafka ├→ 결제 처리
                 ├→ 분석 시스템
                 └→ 알림 시스템

이러한 구조를 통해 생산자와 소비자를 직접 연결하는 대신 카프카를 중간에 두어 시스템 간 결합도를 낮출 수 있습니다.

1.4.4 데이터 처리#

카프카는 이벤트 스트림을 저장하고 전달하는 역할을 담당하며, 이벤트의 변환이나 집계와 같은 스트림 처리 작업은 Kafka Streams, Apache Flink, Apache Spark 등의 기술과 함께 구성할 수 있습니다.

따라서 카프카를 데이터 처리 엔진 하나로 이해하기보다는 이벤트 스트리밍 플랫폼으로 이해하는 것이 정확합니다.


1.5 카프카를 사용하면 좋은 점#

카프카는 대규모 이벤트 스트리밍 환경에서 다음과 같은 특징을 제공합니다.

1.5.1 확장성(Scalability)#

카프카는 파티션과 브로커를 활용하여 데이터를 분산 처리할 수 있습니다.

데이터 처리량이 증가하면 파티션과 브로커를 적절하게 확장하여 처리 능력을 높일 수 있습니다.

1.5.2 고가용성(High Availability)#

카프카는 파티션을 여러 브로커에 복제할 수 있습니다.

브로커 장애가 발생하더라도 복제본을 이용해 서비스를 계속 운영할 수 있도록 구성할 수 있습니다.

단, 실제 가용성은 복제 설정, 장애 대응 구성, 클라이언트 설정 등에 따라 달라집니다.

1.5.3 높은 처리량#

카프카는 순차적인 디스크 I/O와 파티션 기반 분산 구조를 활용하여 대량의 이벤트를 높은 처리량으로 처리할 수 있도록 설계되었습니다.

1.5.4 이벤트 보존과 재처리#

카프카는 메시지를 단순히 소비자에게 전달하고 즉시 삭제하는 방식과 달리, 설정된 보존 기간 동안 이벤트를 저장합니다.

소비자는 자신의 **오프셋(Offset)**을 기준으로 데이터를 읽기 때문에 필요한 경우 과거 이벤트를 다시 처리할 수 있습니다.

1.5.5 시스템 간 결합도 감소#

카프카를 중간에 배치하면 생산자와 소비자가 서로 직접 통신할 필요가 줄어듭니다.

이를 통해 다음과 같은 구조를 만들 수 있습니다.

기존 구조

서비스 A → 서비스 B
서비스 A → 서비스 C
서비스 A → 서비스 D

카프카를 사용하면 다음과 같이 구성할 수 있습니다.

서비스 A
   ↓
 Kafka
   ├→ 서비스 B
   ├→ 서비스 C
   └→ 서비스 D

1.5.6 다양한 시스템과의 연동#

Kafka Connect 등을 이용하면 데이터베이스, 검색 시스템, 데이터 웨어하우스, 파일 시스템 등 다양한 외부 시스템과 데이터를 연결할 수 있습니다.


1.6 카프카가 사용되는 다양한 사례#

카프카는 다양한 산업과 시스템에서 이벤트 스트리밍 플랫폼으로 활용됩니다.

1.6.1 로그 수집 및 분석#

웹 서버와 애플리케이션에서 발생하는 로그를 카프카로 수집한 후 로그 분석 시스템으로 전달할 수 있습니다.

애플리케이션
     ↓
    Kafka
     ↓
로그 분석 시스템

대량의 로그를 여러 소비 시스템으로 전달해야 하는 환경에서 활용할 수 있습니다.

1.6.2 이벤트 추적#

웹 사이트와 애플리케이션에서 발생하는 사용자 행동을 이벤트로 기록할 수 있습니다.

예를 들어 다음과 같은 이벤트가 발생할 수 있습니다.

상품 조회
상품 검색
장바구니 추가
주문 생성
결제 완료

이러한 이벤트를 카프카에 기록하면 분석 시스템, 추천 시스템, 모니터링 시스템 등 여러 소비자가 각각 활용할 수 있습니다.

1.6.3 실시간 데이터 분석#

금융 거래, 서비스 사용량, 센서 데이터 등 지속적으로 발생하는 이벤트를 카프카로 수집하고 스트림 처리 시스템과 연계하여 실시간 분석을 수행할 수 있습니다.

1.6.4 IoT 데이터 처리#

IoT 장치에서 발생하는 센서 데이터를 카프카로 수집하고 이후 분석 및 모니터링 시스템으로 전달할 수 있습니다.

IoT 장치
   ↓
 Kafka
   ↓
스트림 처리
   ↓
저장 / 분석 / 모니터링

1.6.5 이벤트 기반 애플리케이션#

마이크로서비스 환경에서는 서비스 간 상태 변화나 업무 이벤트를 카프카를 통해 전달할 수 있습니다.

예를 들어 주문 서비스에서 OrderCreated 이벤트를 발생시키면 다른 서비스가 해당 이벤트를 독립적으로 소비할 수 있습니다.

주문 서비스
    ↓
OrderCreated
    ↓
  Kafka
 ┌──┼────────┐
 ↓  ↓        ↓
결제 배송   알림

1.6.6 데이터 파이프라인#

카프카는 운영 시스템에서 생성된 데이터를 분석 플랫폼이나 데이터 웨어하우스로 전달하는 데이터 파이프라인의 중간 계층으로 활용할 수 있습니다.


1.7 카프카, 왜 배워야 할까?#

카프카를 이해하기 위해서는 단순히 카프카 명령어를 외우는 것보다 이벤트가 어떻게 생성되고, 저장되고, 전달되고, 소비되는지를 이해하는 것이 중요합니다.

카프카는 다음과 같은 환경에서 특히 중요한 역할을 합니다.

  • 대규모 이벤트 데이터를 처리해야 하는 시스템
  • 여러 시스템 간 비동기 데이터 전달이 필요한 환경
  • 실시간 데이터 파이프라인이 필요한 환경
  • 마이크로서비스 간 이벤트 기반 통신이 필요한 환경
  • 로그와 사용자 이벤트를 중앙에서 수집해야 하는 환경
  • IoT와 같은 대량 이벤트 발생 환경

카프카를 학습하면 다음과 같은 핵심 개념을 함께 이해할 수 있습니다.

  • Producer와 Consumer
  • Topic과 Partition
  • Offset
  • Consumer Group
  • Replication
  • Broker
  • Kafka Connect
  • Kafka Streams
  • 이벤트 기반 아키텍처
  • 데이터 파이프라인

결국 카프카를 배우는 것은 특정 메시징 기술 하나를 익히는 것을 넘어, 대규모 분산 시스템에서 데이터가 어떻게 흐르는지를 이해하는 과정이라고 볼 수 있습니다.


요약#

  • 카프카는 대규모 이벤트 스트리밍 플랫폼입니다.
  • 카프카는 데이터를 이벤트 형태로 저장하고 여러 소비자에게 전달할 수 있습니다.
  • 배치 처리는 데이터를 모아서 처리하고, 스트림 처리는 지속적으로 발생하는 데이터를 처리합니다.
  • 카프카는 이벤트를 일정 기간 보존하므로 과거 이벤트를 다시 처리할 수 있습니다.
  • 파티션과 브로커를 활용하여 대규모 데이터 스트림을 분산 처리할 수 있습니다.
  • Kafka Connect를 이용하면 다양한 외부 시스템과 데이터를 연결할 수 있습니다.
  • Kafka Streams, Apache Flink, Apache Spark 등의 기술과 함께 실시간 데이터 처리 파이프라인을 구성할 수 있습니다.
  • 카프카는 로그 수집, 이벤트 기반 애플리케이션, IoT, 실시간 분석, 데이터 파이프라인 등 다양한 환경에서 활용할 수 있습니다.

자체 점검 문제#

기본 이해#

  1. Apache Kafka란 무엇이며 어떤 목적으로 사용되는지 설명하십시오.
  2. 배치 처리와 스트림 처리의 차이점을 설명하십시오.
  3. 카프카가 전통적인 메시지 큐와 다른 점을 설명하십시오.
  4. 카프카에서 Topic과 Partition이 어떤 역할을 하는지 설명하십시오.
  5. 카프카에서 이벤트가 일정 기간 보존되는 이유는 무엇입니까?

응용 이해#

  1. Producer와 Consumer의 역할을 설명하십시오.
  2. Consumer Group이 필요한 이유를 설명하십시오.
  3. 카프카를 이용해 주문 이벤트를 여러 서비스에 전달하는 구조를 설계하십시오.
  4. 카프카를 이용한 로그 수집 파이프라인을 구성한다면 어떤 시스템을 연결할 수 있는지 설명하십시오.
  5. Kafka와 Kafka Streams의 역할 차이를 설명하십시오.
  6. 카프카를 이용해 IoT 센서 데이터를 처리하는 구조를 설계하십시오.
  7. 카프카가 데이터 파이프라인에서 어떤 역할을 담당하는지 설명하십시오.