LabHub
배우기 러닝패스 코스

데이터 파이프라인 · 이벤트 시간 워터마크와 늦게 온 자료 · 실습

어제 숫자가 오늘 바뀌었다 — 워터마크와 늦게 온 자료

LabHub 에서 이어서 보기

목표

이벤트 시간으로 집계하는 도구 wm.py 를 만든다. 처리 시간과 이벤트 시간의 벌어짐을 분포로 재고, 워터마크를 도착 순서대로 움직이고, 창이 닫힌 뒤 온 자료를 가르고, 버리는 정책과 반영하는 정책의 결과를 견주고, 닫는 순간의 값과 그 뒤의 정정을 따로 남긴다.

왜 중요한가

이 코스의 앞 실습에서 워터마크를 한 번 다뤘다. 적재한 자료의 최대 시각을 표에 적어 다음 실행이 그 뒤만 읽게 하는 것이었고, 그 워터마크가 답하는 질문은 어디까지 읽었는가 하나였다. 여기서는 그 다음을 다룬다.
모바일 앱은 신호를 잃었다가 몇 분 뒤에, 비행기 모드였던 단말은 몇 시간 뒤에 이벤트를 보낸다. 그 이벤트가 일어난 시각은 이미 지나간 시각이고, 우리는 그 시간대의 집계를 이미 내보냈다. 워터마크는 그 자료가 더 오지 않는다고 본다는 약속이지 사실이 아니다.
그래서 정할 것이 셋이다. 허용 지연을 얼마로 잡을 것인가, 약속을 어기고 온 자료를 버릴 것인가 늦은 갱신으로 반영할 것인가, 그리고 반영했다면 어제 낸 숫자와 오늘 낸 숫자의 차이를 어떻게 설명할 것인가.
시간을 재는 실습이 아니다. 이벤트에 적힌 event_time 과 ingest_time 이라는 두 칸으로 계산하는 실습이고, 프로그램이 실제로 몇 초 걸리는지는 아무 상관이 없다.
채점기는 여러분이 적어 낸 문구를 믿지 않는다. 임시 파일에 채점기가 만든 이벤트 흐름을 차려 놓고 여러분의 도구를 실제로 돌려, 창 크기와 허용 지연을 바꿔 가며 답을 대조한다. 건수와 지연 분포는 실행마다 바뀐다.

단계

1. /root/wmark/gen_stream.py 를 만들어 실행해 /root/wmark/work/stream.jsonl 을 만드세요.
2. /root/wmark/wm.pyskew 를 만들어 지연 분포와 순서가 어긋난 건수를 내게 하세요.
3. watermark 를 더해 도착 순서대로 워터마크를 움직이게 하세요.
4. windows 를 더해 이벤트 시간으로 창을 나눠 집계하게 하세요.
5. late 를 더해 창이 닫힌 뒤 온 자료를 가르게 하세요.
6. agg 를 더해 버리는 정책과 반영하는 정책의 결과를 각각 내게 하세요.
7. close 를 더해 닫는 순간의 값과 그 뒤의 정정을 따로 내게 하세요.
8. /root/wmark/work/watermark_report.json/root/wmark/work/watermark_report.md 를 쓰세요.

참고

단계 8개

  1. 늦게 오는 이벤트를 손에 쥐기
  2. 얼마나 벌어지는지부터 잰다
  3. 워터마크를 도착 순서대로 움직이기
  4. 이벤트 시간으로 창 나누기
  5. 창이 닫힌 뒤 온 자료 가려내기
  6. 버릴 것인가 반영할 것인가
  7. 닫는 순간의 값과 정정을 따로 남기기
  8. 바뀐 숫자를 설명하는 한 장