이 글은 책 내용을 토대로 작성하였습니다.
목차
내결함성
- 스트림 처리자가 어떻게 결함에 견디는지 알아본다.
마이크로 일괄 처라와 체크포인트
-
스트림은 무한하다.
그러므로 스트림의 시작과 끝을 정하여 작은 블록으로 쪼갠 후
각 블록을 일괄 처리하듯이 다루는 방법을
마이크로 일괄 처리(Microbatching)라 한다.
ex) 스파크 스트리밍
-
마이크로 일괄 처리의 크기는 일반적으로 약 1초 정도로 설정한다.
사이즈가 작으면 스케줄링 + 코디네이션 비용이 커진다.
사이즈가 커지면 처리 결과를 보기까지 지연시간이 발생한다.
-
만약 설정한 크기에서 한 번에 처리를 못 할 땐
작업 수행 후 상태를 명시적으로 다음 작업으로 넘긴다. (= 체크포인트)
한계
-
작업을 완료 후 해당 출력을 소비하려는 객체에 데이터를 보냈는데
(ex. 디비에 기록, 외부 메시지 브로커에 데이터 전송 등)
알고보니 잘못된 데이터를 보냈을 경우
스트림을 처리하는 객체에는 마땅한 방법이 없다.
-
만약 로직을 수정하여 재시도하더라도
외부 객체에는 2개의 데이터를 보내게 된다.
-
이런 문제를 방지하기 위해선 성공했을 경우에만 출력할 수 있도록 해야 한다.
-
이와 관련된 개념으로는 원자적 커밋을 할 수 있도록 하거나
혹은 멱등성 개념을 활용할 수 있다.