IT개발

실시간 데이터 스트리밍 아키텍처: Apache Flink vs Kafka Streams

우리모두 개발자되기 2025. 5. 1. 21:01

 

실시간 데이터 스트리밍 아키텍처: Apache Flink vs Kafka Streams


1. 실시간 데이터 스트리밍이란 무엇인가

현대 애플리케이션은 더 이상 데이터 분석을 배치(Batch)로만 수행하지 않습니다.
사용자 이벤트, IoT 센서 데이터, 로그, 트랜잭션 기록 등 실시간으로 생성되는 대량의 데이터를
"지연 없이" 처리하고 분석하는 요구가 증가했습니다.

**실시간 스트리밍 데이터 처리(Stream Processing)**란

  • 데이터가 생성되는 즉시
  • 순차적으로 데이터를 수신하고
  • 즉각적으로 처리 및 결과를 제공하는 방법론입니다.

이는 금융 트랜잭션 모니터링, 사용자 행동 분석, 장애 탐지, 실시간 알림 시스템 등
광범위한 분야에서 필수적인 아키텍처가 되었습니다.


2. 실시간 스트리밍 시스템의 필수 요소

실시간 데이터 스트리밍 아키텍처를 설계할 때 고려해야 할 핵심 요소는 다음과 같습니다.

  • 지연(latency): 데이터 수신부터 결과 출력까지의 시간
  • 처리 정확성(accuracy): 데이터 중복 방지, 정렬 보장
  • 확장성(scalability): 대량 데이터 처리 능력
  • 장애 복구(fault tolerance): 장애 발생 시 자동 복구
  • 상태 관리(state management): 집계, 세션 분석 등 중간 상태 유지
  • 시간 처리(event-time, processing-time): 늦게 도착한 데이터 처리

이러한 요건을 충족시키기 위해
Apache Flink와 Kafka Streams 같은 고급 스트리밍 프레임워크가 등장했습니다.


3. Apache Flink 심층 분석

3.1 개요

  • 2015년 Apache Incubator 졸업
  • Stateful Stream Processing에 최적화된 엔진
  • "Streaming First" 아키텍처를 철저히 지향

3.2 주요 특징

  • Event Time 처리 최강
    • 수집 시간이 아니라 이벤트 발생 시각을 기준으로 정렬 및 집계
    • Watermark 개념으로 늦은 데이터(Late Data) 처리 가능
  • Exactly-Once 처리 보장
    • 데이터 중복 없이 정확히 한 번만 처리하는 복잡한 상태 복구 지원
  • 강력한 상태 관리
    • Keyed State, Operator State 등 다양한 상태 유형 지원
    • RocksDB 기반 외부 상태 저장 가능
  • 확장성과 병렬성
    • 수십 테라바이트 이상의 상태도 안정적으로 운영 가능
    • 체크포인트(Checkpointing) 및 세이브포인트(Savepoint) 기능 내장
  • 유연한 배포 모델
    • Standalone, YARN, Kubernetes, Cloud 환경 등 다양한 배포 지원
  • Batch + Streaming 통합
    • Flink 1.12 이후 "Unified Data Processing" 지원
    • 스트리밍과 배치를 동일한 코드로 처리 가능

3.3 Flink 아키텍처

  • JobManager: 애플리케이션 실행을 관리
  • TaskManager: 실제 데이터 처리를 담당하는 작업 노드
  • Checkpoint Coordinator: 주기적으로 상태를 저장하여 장애 복구 지원

Flink는 DAG(Directed Acyclic Graph)로 구성된 데이터 플로우를 실행하며,
각 Task는 병렬로 실행되어 고성능을 발휘합니다.


4. Kafka Streams 심층 분석

4.1 개요

  • Apache Kafka와 함께 제공되는 클라이언트 라이브러리
  • Kafka Topics를 직접 읽고 쓰며 분산 처리를 수행
  • 별도의 클러스터 없이 "애플리케이션 내"에서 실행

4.2 주요 특징

  • 초경량 아키텍처
    • 별도 서버가 필요 없고, 애플리케이션에 라이브러리로 포함
    • JVM 기반(Spring Boot 등과 자연스럽게 통합)
  • Kafka 친화성
    • Kafka Topic의 파티션과 1:1 매핑하여 고성능 스트리밍 가능
    • Kafka Consumer Group의 원리를 그대로 활용
  • Exactly-Once Semantics 지원
    • Kafka 0.11 이상 버전부터 Transaction 기능을 활용하여 중복 없는 처리 보장
  • 내장 상태 저장소(State Store)
    • RocksDB 기반 로컬 상태 저장
    • 장애 시 Kafka Changelog 토픽으로 복구
  • Time Windowing 지원
    • Hopping, Tumbling, Sliding 윈도우 등 다양한 윈도우 집계 가능
  • KTable, GlobalKTable 제공
    • KStream (이벤트 스트림)과 KTable (업데이트 스트림) 간 변환 용이

4.3 Kafka Streams 아키텍처

Kafka Streams 애플리케이션은

  • 하나 이상의 쓰레드에 할당된
  • 하나 이상의 Stream Task로 구성됩니다.

각 Task는

  • Input Topic Partition을 읽고
  • 프로세싱 로직을 수행한 후
  • Output Topic에 데이터를 기록합니다.

Kafka 자체의 강력한 내구성과 복구 기능을 활용하기 때문에
추가적인 인프라 없이 고가용성을 달성할 수 있습니다.


5. Apache Flink vs Kafka Streams 비교

항목  Apache Flink Kafka Streams
배포 방식 별도 클러스터 필요 애플리케이션 내 통합 실행
처리 모델 스트리밍 + 배치 통합 순수 스트리밍
상태 관리 외부 RocksDB 연동 가능 내장 RocksDB 기반 로컬 저장
확장성 대규모 클러스터 지원 Kafka 파티션 수에 따라 확장
지연 시간 매우 낮음 (sub-second) 매우 낮음 (sub-second)
복구 메커니즘 체크포인트, 세이브포인트 Kafka Changelog 복구
Event Time 지원 매우 강력 기본 지원 (Watermark 사용 제한적)
유즈케이스 복잡한 스트림 처리, 머신러닝, 대용량 분석 마이크로서비스, 경량 스트림 애플리케이션
학습 곡선 다소 높음 매우 낮음

6. 스트리밍 아키텍처 선택 가이드

6.1 Apache Flink가 적합한 경우

  • 복잡한 데이터 흐름이 필요한 경우
    • 여러 소스 및 싱크를 연결하거나 복잡한 집계, 조인을 수행해야 할 때
  • 엄격한 Exactly-Once 처리가 필요한 경우
    • 금융, 결제, 실시간 광고 집계 등
  • 대규모 스트림 처리 시스템을 구축할 경우
    • 수백 테라바이트 이상의 상태 관리가 필요한 경우
  • Event Time 중심 처리 로직이 필요한 경우
    • 늦게 도착하는 데이터까지 정밀하게 처리해야 할 경우

6.2 Kafka Streams가 적합한 경우

  • 간단하고 경량화된 스트리밍 처리가 필요한 경우
    • 서비스 내부에서 로컬 처리 및 결과 기록만 하면 되는 경우
  • Kafka 기반 마이크로서비스를 운영하는 경우
    • Kafka와의 통합이 매우 긴밀한 애플리케이션이 필요할 때
  • 별도의 클러스터를 운영하고 싶지 않은 경우
    • 추가 인프라 없이 개발 속도를 높이고자 할 때
  • 빠른 개발 및 배포 주기가 중요한 경우
    • Spring Boot 등 기존 기술 스택과 자연스럽게 통합하려 할 때

7. 실시간 스트리밍 구축 Best Practice

  • 데이터 스키마 관리 철저
    • Avro, Protobuf 등을 사용하여 스키마 진화 관리
  • 모니터링 필수
    • Flink: Flink Dashboard + Prometheus + Grafana
    • Kafka Streams: Micrometer 기반 모니터링 구축
  • 백프레셔(Backpressure) 대응 전략 수립
    • Flink: 자동 Backpressure 탐지
    • Kafka Streams: Consumer lag 모니터링
  • 장애 복구 시나리오 마련
    • Flink: Savepoint 기반 롤백
    • Kafka Streams: 자동 리밸런싱 설정
  • 적절한 체크포인트 주기 설정
    • 너무 짧으면 오버헤드, 너무 길면 복구 시간 증가
  • 멀티 리전 대비 설계
    • Kafka MirrorMaker2, Flink HA 설정 등 활용

8. 결론

Apache FlinkKafka Streams
모두 강력한 실시간 스트리밍 프레임워크입니다.

그러나 선택은 다음에 달려 있습니다.

  • 플랫폼 규모 (대규모? 소규모?)
  • 개발 난이도 허용 범위 (고급 최적화? 간단한 개발?)
  • 운영 복잡성 (클러스터 운영 감당 가능?)
  • 통합해야 할 시스템 (Kafka 이외 다른 소스/싱크?)

Flink는 무한한 확장성과 복잡한 처리를 원하는 대규모 플랫폼에 적합하고,
Kafka Streams는 빠른 개발과 단순한 운영을 원하는 마이크로서비스 환경에 최적화되어 있습니다.

자신의 요구사항에 맞게 신중히 선택하여,
실시간 데이터 스트리밍의 강력한 힘을
비즈니스 경쟁력으로 전환해 보시기 바랍니다.