Gidhub BE Developer

[데이터 중심 애플리케이션 설계] 11장. 스트림 처리 : 3. 스트림 처리 - 1편

2022-06-24
goodGid

이 글은 내용을 토대로 작성하였습니다.

목차

  1. 이벤트 스트림 전송 - 1편

  2. 이벤트 스트림 전송 - 2편

  3. DB와 스트림 - 1편

  4. DB와 스트림 - 2편

  5. 스트림 처리 - 1편

  6. 스트림 처리 - 2편


스트림 처리

  • 하나 이상의 입력 스트림을 처리해 하나 이상의 출력 스트림을 생산할 수 있다.

  • 스트림을 처리하는 코드 조각을 연산자 혹은 작업이라 부른다.


스트림 조인

  • 스트림은 끊임없이 이벤트가 발생하므로

    스트림 상에서 수행하는 조인은

    일괄 처리 작업에서 수행하는 조인보다 훨씬 어렵다.


스트림 스트림 조인 (윈도우 조인)

  • 검색 기능이 있는 웹사이트에서 검색된 URL의 최신 경향을 파악하고자 한다.

    그러면 어떤 키워드로 검색했는지와 그 검색 결과를 하나의 이벤트로 로그를 남긴다.

    그리고 누군가 그 검색 결과에서 하나를 클릭 시 클릭을 기록하는 다른 이벤트를 로깅한다.

  • 검색 결과에서 각 URL당 클릭률을 계산하려면

    같은 세션 ID를 가져서

    서로 연관되는 검색 이벤트와 클릭 활동 이벤트를 함께 모아야 한다.

  • 사용자가 검색 결과를 쓰지 않고 버리면 클릭이 전혀 발생하지 않을 수 있다.

    클릭이 발생했더라도 검색과 클릭 사이의 시간은 가변적이다.

  • 대부분 몇 초내 검색 결과를 클릭하지만

    검색 해놓고 다른 걸 하다 뒤늦게 클릭을 하여 엄청나게 오래 걸릴 수 있다.

  • 또한 네트워크 지연과 같은 문제로

    클릭 이벤트가 검색 이벤트보다 먼저 도착할 수 있다.

  • 그래서 조인을 위한 적절한 윈도우 선택이 필요하다.

    ex) 1시간 이내에 발생한 검색과 클릭을 조인한다.


정확한 클릭률

  • 정확한 클릭률을 구현하려면 스트림 처리자가 상태(State)를 유지해야 한다.

  • 예를 들어 지난 시간에 발생한 모든 이벤트를 세션 ID로 인덱스를 걸어둔다.

    검색 이벤트나 클릭 이벤트가 발생할 때마다 해당 인덱스에 추가하고

    스트림 처리자는 같은 세션 ID로 이미 도착한 다른 이벤트가 있는지 확인한다.

  • 이벤트가 매칭되면 검색한 결과를 클릭했다는 이벤트를 생성하고

    검색 이벤트가 클릭 이벤트 없이 만료되면

    검색 결과가 클릭 되지 않았다는 이벤트를 생성한다.


스트림 테이블 조인 (스트림 강화)

  • 위 그림(=사용자 활동 이벤트 분석 예제)에서 2개의 데이터 셋을 이용한다.

    사용자 활동 이벤트 집합, 사용자 프로필 DB

  • 이때 입력은 사용자 ID를 포함한 활동 이벤트 스트림이고

    출력은 “사용자의 활동 이벤트 + DB에서 읽은 해당 ID를 가진 사용자 프로필 정보”가 추가된 활동 이벤트이다.

  • 이 과정을 DB의 정보를 사용하여 활동 이벤트를 강화(Enriching)한다고 한다.


DB 테이블 최신화 방법

  • 여기서 DB 질의는 원격 질의를 할 수 있지만

    느리고 DB에 과부하를 줄 위험이 있어

    상황에 따라 스트림 처리자 내부에 DB 사본을 갖고 있을 수 있다.

  • 그런데 이렇게 사본을 갖고 있게 되면

    최신 상태를 유지하기 위한 추가 작업이 필요하며

    그 방법의 하나로 CDC를 사용할 수 있다.

  • 스트림 처리자는 활동 이벤트를 스트림으로 받는 것처럼

    사용자 프로필 DB의 변경 로그를 구독하여

    실시간으로 로컬에 가진 DB 사본을 업데이트한다.


Refernece


Recommend

Index