스트리밍 시스템에 관한 이론과 다양한 방식에 관해 소개하며 배치와 차이에 대한 오해를 잡아준다
- 데이터 처리
- 비 순서 데이터: 스트리밍 시스템에 인입되는 데이터는 이벤트 시간과는 무관하게 인입되기 때문에 비 순서 데이터로 분류해야한다
- 무엇을, 어디서, 언제, 어떻게: 무한 데이터 처리에 대한 핵심을 분리하기 위해 저자가 제안
- 어떤 결과가 계산되야 하는가? → Transfomation(변환)
- 이벤트 시간의 어디서 계산되야 하는가? → window(윈도우)
- 처리 시간의 언제 결과가 구체화 되는가? → trigger(트리거), watermark(워터마크)
- 결과 사이의 관계는 어떻게 되는가? → 무시, 누적, 누적 및 철회
- 변환(Transfomation)
- 원하는 결과를 만들어 내기 위해 데이터를 변환하는 행위
- 윈도우
- 데이터 소스를 시간 경계에 따라 자르는 작업
- 패널: 윈도우 별로 생성되는 출력 데이터
- 트리거
- 언제 윈도우의 결과가 생성되어야 하는지 결정
- 반복 업데이트 트리거: 일정 시간, 데이터 인입 수처럼 고정된 시점에 발생하는 트리거
- 완료 트리거: 입력이 완료되었다고 생각되는 시점에 발생하는 트리거
- 워터마크
- 이벤트 스트림에서 처리 중인 데이터의 진행 정도와 완결 여부를 이벤트 시간과 관련해 결정하는 방법
- 가비지 컬렉션: 입력 데이터가 얼마나 지연될 수 있는지 한계를 두는것 → 시스템 자원은 무한하지 않음
- 완벽한 워터마크: 모든 데이터는 정시에 도착하고 당연히 지연 데이터는 존재하는 않는다
- 휴리스틱 워터마크: 특정 원인에 의해 지연 데이터가 발생한 염두에 둔 워터마크
- 문제점
- 너무 느림: 워터마크가 미처리된 데이터를 기다리느라 지연되는 케이스
- 너무 성급함: 휴리스틱 워터마크에서만 발생. 윈도우를 너무 빨리 완성하여 결과가 누락되는 케이스
- 문제점의 해결: 워터마크와 트리거의 조합!!
- 워터마크 트리거의 앞/뒤로 반복 업데이트 트리거를 발생시킨다
- 생략 가능한 조기 패널: 워터마크가 윈도우의 끝을 지나기 전에 주기적으로 업데이트 → 느려짐을 방지한다
- 단일 정시 패널: 워터마크가 윈도우의 끝을 통과한 후에 동작하는 트리거 → 입력의 완결성 보장
- 생략 가능한 지연 패널: 워터마크가 윈도우의 끝을 통과한 후 주기적으로 발생하는 트리거 → 성급한 처리를 방지한다
- 누적
- 하나의 윈도우에 대해 트리거가 여러 패널로 결과를 생성하는 경우 관계
- 무시 모드: 패널이 구체화 될 때 이전 저장된 값은 무시된다
- 누적 모드: 패널이 구체화 될 때 이전 상태와 함께 새로운 값이 결정된다
- 누적 및 철회: 이전 결과와 새로운 결과(누적) 를 동시에 담아 표기한다
- 워터마크
- 아직 완료되지 않는 가장 오래된 작업이 갖는 단조 증가 타임스탬프
- 완결성, 가시성의 속성을 지닌다
- 완벽한 워터마크
- 워터마크보다 작은 이벤트 시간을 갖는 데이터의 입력이 없음을 보장
- 인입 타임스탬프: 데이터의 인입 시간(처리 시간)을 기준으로 하는 워터마크
- 시간 순 정렬된 로그 데이터: 카프카 토픽처럼 오프셋을 가진 시간순 로그 데이터
- 휴리스틱 워터마크
- 워터마크보다 이른 이벤트 시간을 갖는 데이터가 올 가능성이 적다는 가정인 워터마크
- 구조화된 동적 로그 파일: 개별 파일은 단조 증가이나 전체 파일은 순서가 없는 경우
- 워터마크 전파
- 입력 워터마크: 해당 단계의 모든 업스트림 진행 상황( 해당 단계에서 입력이 완료된 정도)을 가진 워터마크 → 입력의 최소값
- 출력 워터마크: 해당 단계의 진행 정도. 다운 스트림으로 구체화 되지 않은 데이터와 전달 중인 데이터의 최소값
- 처리 시간 워터마크
- 완료되지 않은 가장 오래된 연산의 처리 시간 타임스탬프
- 처리 지연인지 데이터 지연인지 알기 위한 워터마크
- 고급 윈도우
- 처리 시간 윈도우: 처리 시간을 기준으로 하는 윈도우
- 이벤트 시간 윈도우는 순서에 독립적이나 처리 시간 윈도우는 아니다
- 트리거: 처리 시간 축에서 해당 윈도우의 스냅샷을 사용하는 트리거를 이용
- 인입 시간: 데이터가 인입하는 시간을 이벤트 시간을 설정하여 사용
- 세션 윈도우
- 입력 데이터 기반의 데이터 기반 윈도우
- 비 정렬 윈도우이며 데이터의 특정 부분 집합에 대해 적용된다
- 작고 겹치는 윈도우를 병합해 최종 세션 윈도우를 생성해낸다
- 커스텀 윈도우