Apache Kafka Streams란? (개념부터 실전 사용 예까지)

GarionNachal·2026년 1월 29일

kafka

목록 보기
19/24
post-thumbnail

Kafka Streams는 카프카 클러스터에 저장된 데이터를 입력/출력으로 삼아 “애플리케이션 내부에서” 스트림 처리를 수행하는 라이브러리라는 점이 핵심입니다. Source


1) Kafka Streams 한 줄 정의

Kafka Streams는 “Kafka 토픽을 입력으로 받아(consume) 변환/집계/조인/윈도우 처리 등을 수행한 뒤, 결과를 다시 Kafka 토픽으로 내보내(produce) 실시간 파이프라인을 만드는 JVM 라이브러리”입니다. Source


2) 왜 Kafka Streams를 쓰나? (장점/특징)

2.1 애플리케이션에 “임베드”되는 스트림 처리

별도 클러스터(예: 별도의 스트림 엔진)를 운영하기보다, 일반 서비스처럼 배포/스케일링하면서 스트림 처리를 붙일 수 있습니다. Source

2.2 Stateful 처리(상태 저장)와 빠른 로컬 상태

Kafka Streams는 로컬 상태 저장소를 활용해 윈도우 집계, 조인 같은 stateful 연산을 효율적으로 처리할 수 있습니다. Source

2.3 Exactly-once(정확히 한 번) 처리 의미론 지원

실패/재시도 상황에서도 레코드가 중복 처리되지 않도록 exactly-once processing semantics를 지원합니다. Source


3) 핵심 개념 5가지 (초보가 여기서 막힘)

3.1 KStream vs KTable (감 잡기)

  • KStream: 이벤트의 연속(“무한 스트림”), 각 레코드는 독립 이벤트
  • KTable: “최신 상태” 테이블(업데이트/변경 로그 기반), 키별 최종값을 대표

DSL 문서 기준으로 Kafka Streams는 KStream/KTable/GlobalKTable 같은 추상화를 제공합니다. Source

3.2 Topology(토폴로지)

여러 연산(map/filter/join/aggregate)을 연결한 처리 그래프가 토폴로지입니다.

Kafka Streams Topology Diagram
Source

3.3 Stateless vs Stateful

  • Stateless: filter/map처럼 레코드 단독 처리
  • Stateful: aggregation/join/window처럼 “과거/누적 상태” 필요

(공식 개념에서도 stateful 연산의 핵심으로 윈도우 조인/집계를 언급) Source

3.4 Windowing(윈도우)

“최근 5분”, “10초 단위”처럼 시간 구간으로 묶어 집계할 때 사용합니다.

3.5 Joins(조인)

  • Stream-Stream join (시간 윈도우 기반으로 매칭)
  • Stream-Table / Table-Table join 등

4) 다양한 사용 예(현업 시나리오 중심)

아래는 “Kafka Streams로 딱 맞게” 해결되는 대표 케이스들입니다.

예시 A. 실시간 로그/이벤트 필터링 & 라우팅 (Stateless)

상황: 결제 이벤트에서 FRAUD_SUSPECT만 따로 토픽으로 보내고, 나머지는 정상 처리로 분기.
왜 Streams?: 단순하지만 초고속/항상 켜진 파이프라인이 필요할 때 적합.

관련 개념: DSL 기반의 스트림/테이블 추상화 Source


예시 B. 실시간 집계(aggregation): “분당 UV”, “상품별 클릭 수”

상황: 클릭 이벤트를 상품ID로 그룹화해 1분 단위로 카운트 집계.
포인트: 이건 stateful(상태 필요)이고, 보통 windowing을 곁들입니다.

Kafka Streams는 윈도우 집계 같은 stateful 연산을 빠르게 지원한다고 명시합니다. Source


예시 C. 실시간 이상탐지(간단 룰 기반)

상황: “10분 내 결제 5회 이상 + 국가 변경” 같은 룰로 경보 이벤트 생성
구현 힌트: KTable(최신 상태) + windowed aggregation 조합이 흔합니다.


예시 D. 이벤트 조인: 주문 + 결제 + 배송 이벤트 결합

상황: 주문 이벤트와 결제 이벤트를 일정 시간 창(window) 안에서 매칭해 “주문완료” 이벤트 생성.
왜 Streams?: 스트림-스트림 조인은 전형적인 stateful + window 기반 패턴입니다. Source


예시 E. 마이크로서비스에서 “CQRS read model” 만들기 (KTable)

상황: 여러 이벤트(회원수정/주소변경/탈퇴)를 소비해 회원 프로필의 최신 상태 뷰를 토픽/스토어로 유지
효과: 읽기 API는 “현재 상태”를 빠르게 제공하고, 쓰기는 이벤트로만 기록(이벤트 소싱 스타일)


5) (짧게 보는) 대표 학습 리소스

공식 문서

  • Kafka Streams 소개/문서 허브: Source
  • Core Concepts (stateful, exactly-once 등): Source
  • Streams DSL API: Source

영상(입문용)

(위 영상 링크는 검색 결과에서 확인된 video_id 기반입니다.)

profile
AI를 꿈꾸는 BackEnd개발자

0개의 댓글