스트림 프로세싱이란?
스트림 프로세싱은 스트리밍 데이터가 레코드나 정의된 단위에 따라 순차적으로 처리되는 것을 의미한다.
- 스트리밍 데이터: 복수의 데이터 소스(Data Source)로부터 연속적으로 생성되는 데이터 레코드(대부분 KB 단위 크기)
스트림 프로세싱은 일정량 또는 일정기간 동안 데이터를 모아서 한꺼번에 처리하는 일괄처리(Batch Processing)와 비교하여 연속되는 실시간 데이터를 처리하기 때문에 빠르고 효율적인 데이터 활용이 가능하다.
스트림 vs 일괄처리
기준 | 일괄처리 | 스트림 |
---|---|---|
처리방식 | 일정기간 단위로 수집하여 한 번에 처리 | 연속된 데이터를 하나씩 처리 |
처리량 | 대규모 데이터 단위 | 주로 소량의 레코드 단위 |
속도 | 수분~시간의 지연시간 | (준)실시간 |
사용환경 | 복잡한 분석이 요구되는 환경 데이터 처리량이 많은 환경, 데이터를 스트림으로 전달할 수 없는 레거시 시스템 환경 |
실시간 처리 및 분석 정보가 요구되는 환경 고급 메시징 |
예시 | 급여 및 청구 시스템 | 은행 ATM 부정행위 탐지 및 모니터링 시스템 SNS 데이터 분석 |
스트림 프로세싱의 특징
-
이벤트 처리보장: 분산 데이터 파이프라인에서 데이터를 전달하는 방법
-
At-least-once
- 최소 한 번의 전달 보장
- 데이터 전송 후 전달 완료가 확인되지 않아 타임아웃되면 재전송
- 데이터가 중복으로 수신되어도 무방한 경우에 사용
-
At-most-once
- 한 번의 전송만 수행
- 지연이나 유실이 발생해도 데이터를 재전송하지 않음
- 데이터를 수신하지 않아도 무방한 경우에 사용
-
Exactly-once
- 정확하게 한 번의 전달만 보장
-
Exactly-once가 가장 신뢰할 수 있는 방법이지만, 성능 부하로 인한 비용을 고려하여 적절한 방법을 선택해야 한다.
-
내결함성: 장애가 발생하면 복구하여 처리 시점부터 재개할 수 있는 기능
- ex) 플링크의 경우 이벤트 스트림이 메모리에 적재되기 때문에 시스템이 갑작스럽게 중단되면 처리 중이던 데이터의 복구가 어려울 수 있다. 이를 방지하기 위하여 세이브 포인트(Save Point) 기능으로 현재 메모리에 적재된 내용의 스냅샷을 영구 저장소에 백업하는 기능을 지원함.
-
상태관리: 이벤트 처리는 입력 데이터의 가공과 분석을 수반하기도 하므로 현재 상태를 관리하고 갱신할 수 있어야 함.
- 실시간으로 유입되는 데이터에 워터마크나 유한 크기로 분할해 처리하는 윈도우 개념이 적용되기도 함.
스트림 프로세싱의 구분
구현하는 방법에 따라 네이티브 스트림(Native Stream)과 소규모 일괄처리(Micro Batch) 형태로 구분할 수 있다.
- 네이티브 스트림
-
지속적으로 유입되는 새로운 데이터(Unbounded Data)를 처리하기 위해 별도의 프로세서를 두기 때문에 상태 관리가 용이함.
-
이 프로세서는 프레임워크에 따라 오퍼레이터(Operator), 테스크(Task) 등으로 불리며 데이터의 가공 처리를 수행할 수 있다.
-
지연시간 최소
-
이벤트 처리 보장 방식에 따라 내결함성 유지가 어려움
-
ex) 아파치 플링크, 카프카 스트림즈
-
- 소규모 일괄처리
- 일반적인 일괄처리와 비교하여 작업 수행주기의 기간임계치가 짧다.
- 네이티브 스트림과 비교하면 상태 관리가 어렵지만 내결함성 면에서 이점이 있음.
- 네이티브 스트림 대비 지연시간 발생
- ex) 스파크