728x90
Kafka Streams는 Apache Kafka의 스트리밍 데이터를 실시간으로 처리하기 위한 Java 라이브러리이다. Kafka Streams는 데이터를 Kafka 토픽에서 읽어와 실시간으로 변환, 집계, 분석한 뒤 결과를 다시 Kafka 토픽으로 쓰는 데 사용된다. 이를 통해 분산 스트리밍 애플리케이션을 쉽게 구현할 수 있다.
Kafka Streams의 주요 개념
- 스트림(Stream)
- Kafka 토픽에서 지속적으로 흐르는 데이터
- Kafka Streams에서는 스트림이 무한히 이어지는 레코드들의 순차적 흐름으로 간주된다.
- 토폴로지(Topology)
- 스트림 처리 작업의 논리적 흐름
- 데이터 변환, 필터링, 집계 등의 작업이 단계별로 정의된다.
- 키값 쌍(Key-Value Pair)
- Kafka Streams에서 처리되는 데이터는 항상 키값 쌍 형태이다.
- 상태 저장(Stateful Processing)
- Kafka Streams는 로컬 상태 저장소(state store)를 사용하여 상태를 유지하며 이를 통해 집계나 조인을 효율적으로 처리한다.
- 처리 보장
- Kafka Streams는 메시지 처리를 Exactly Once, At Least Once로 보장할 수 있다.
Kafka Streams의 주요 구성 요소
- KStream
- 연속적인 스트림 데이터를 나타낸다.
- 주로 Kafka 토픽에서 데이터를 읽고 변환 작업에 사용된다.
- 예 : 필터링, 매핑, 집계
- KTable
- 업데이트 가능한 상태를 나타낸다.
- 테이블처럼 동작하며 키에 따라 데이터를 덮어쓴다.
- 주로 데이터의 현재 상태를 관리할 때 사용된다.
- 예 : 누적 합계, 마지막 값 저장.
- GlobalKTable
- Kafka 클러스터 전체에서 복제된 테이블
- 모든 노드가 동일한 데이터를 가지고 있음
- 주로 조인(join) 작업에서 사용된다.
Kafka Streams의 특징
- 분산 처리
- Kafka Streams는 Kafka 클러스터를 활용하여 데이터를 병렬 처리
- 애플리케이션은 클러스터의 모든 인스턴스에 걸쳐 실행된다.
- 가벼운 아키텍처
- 별도의 클러스터나 브로커가 필요하지 않고 애플리케이션에 내장되어 작동
- 확장성
- Kafka 토픽의 파티션 수에 따라 확장이 가능
- Exactly Once Processing
- Kafka의 트랜잭션을 활용하여 데이터 손실이나 중복 없이 정확히 한 번 처리 보장.
- 상태 관리
- 로컬 상태 저장소(RocksDB)를 사용하여 상태를 유지하고, 장애 발생 시 체크포인트 및 복구 지원
Kafka Streams의 주요 사용 사례
- 실시간 로그 분석
- 실시간으로 로그 데이터를 수집, 필터링, 집계
- 이벤트 기반 애플리케이션
- 사용자 이벤트 데이터를 실시간으로 처리하여 분석
- 사기 탐지
- 금융 트랜잭션 데이터 스트림에서 이상 거래 탐지
- 실시간 데이터 변환
- 데이터를 읽어 변환 후 다른 시스템으로 전달
Kafka Streams의 장점
- 내장형 배포
- 별도의 클러스터 없이 애플리케이션에 포함하여 실행
- 고성능
- Kafka의 높은 처리량과 안정성을 그대로 사용
- 개발 편의성
- 직관적인 API 제공
Kafka Streams vs 다른 스트리밍 프레임워크
특징 | Kafka Streams | Apache Flink | Spark Streaming |
배포 방식 | 내장형 애플리케이션 | 전용 클러스터 필요 | Spark 클러스터 필요 |
상태 관리 | 내장 상태 저장소(RocksDB) | 사용자 정의 가능 | 제한적 |
사용 사례 | Kafka와의 밀접 통합 | 복잡한 처리 워크플로우 | 배치와 스트리밍 결합 |
학습 곡선 | 쉬움 | 중간 | 중간 |
Kafka Streams는 Kafka 중심의 실시간 스트리밍 처리에 최적화된 라이브러리로 간단한 설정과 강력한 기능을 제공한다. 복잡한 워크플로우보다는 Kafka 데이터를 기반으로 한 실시간 변환과 집계에 적합하다.
반응형
'Database' 카테고리의 다른 글
아파치 카프카(Apache Kafka) - Amazon MSK (0) | 2025.01.07 |
---|---|
아파치 카프카(Apache Kafka) - 카프카 커넥트 (0) | 2025.01.07 |
아파치 카프카(Apache Kafka) - 프로듀서, 컨슈머 (0) | 2025.01.06 |
아파치 카프카(Apache Kafka) - RabbitMQ, Redis Queue 와 차이 (0) | 2025.01.05 |
아파치 카프카(Apache Kafka) - 컨슈머 랙(Consumer Lag) (1) | 2025.01.05 |