서명 token, `click_id`, 발생·수신 시각을 받아 durable log에 수락합니다.
광고 클릭 이벤트
집계 설계
클릭은 빨리 보이되 쉽게 확정하면 안 됩니다. 불변 원본, 안정된 click_id, event-time watermark, 무효 판정, 조정 원장을 분리하면 늦은 이벤트와 분쟁을 숫자의 계보로 설명할 수 있습니다.
수집 성공은 청구 확정이 아닙니다. `click_id`로 중복을 억제하고 event time과 watermark로 잠정 window를 닫습니다. 늦은 도착·무효 판정은 과거 count를 덮어쓰는 대신 버전이 있는 delta로 남기고, billing close는 별도 reconciliation을 거쳐 승인합니다.
실시간 숫자와 정산의 진실을 분리한다
클릭 리포트는 빠른 최적화 신호이고, 청구는 계약·무효 활동·분쟁이 반영된 승인 기록입니다. 하나의 카운터가 두 역할을 모두 맡으면 late event와 fraud 재판정이 발생할 때 설명할 수 없는 숫자가 됩니다.
campaign·publisher·minute 기준 event-time 집계와 watermark를 제공합니다.
rule/model version과 reason을 남겨 valid·pending·invalid를 분리합니다.
base count를 덮지 않고 late·retraction delta와 close snapshot을 기록합니다.
원본, 판정, 합계, 조정을 서로 다른 정본으로 둔다
중복을 억제하고, 시간을 닫고, 조정은 남긴다
token·campaign 관계·크기·발생 시각 범위를 검사하고 receipt를 붙입니다.
`click_id`와 payload hash로 duplicate·conflict를 구분합니다.
event time으로 minute window를 만들고 per-partition watermark를 적용합니다.
rule/model version이 valid·pending·invalid와 reason을 기록합니다.
late/retraction delta와 raw-to-billing 대조를 승인 흐름으로 남깁니다.
watermark는 확정 약속이 아니라 진행 경계다
event time은 클릭이 발생한 시간이고, received time은 gateway가 받은 시간입니다. 늦게 도착한 정당한 클릭을 지금 시간으로 세지 않기 위해 event-time window를 사용합니다. watermark 이후의 데이터도 도착할 수 있으므로 late 허용 범위와 조정 정책을 함께 설계합니다.
| 선택 | 얻는 것 | 대가·검증 |
|---|---|---|
| processing-time count | 낮은 지연, 단순한 worker | offline SDK와 리전 지연으로 시간대가 왜곡됨 |
| event-time + watermark | 발생 시각 기준의 공정한 window | 열린 state, watermark stall, late delta를 운영 |
| exact click_id dedupe | 청구 경로의 재시도 중복을 강하게 제어 | TTL·고카디널리티 state·conflict 격리 필요 |
| probabilistic filter | 저비용·대규모 중복 힌트 | false positive가 실제 클릭을 잃을 수 있어 청구 정본에는 부적합 |
| overwrite replay | 처음 구현은 빠름 | 과거 값·원인·정산 snapshot을 설명할 수 없음 |
| base + immutable delta | late·retraction·rollback의 계보 | query merge, compaction, 승인 절차가 필요 |
유실, 중복, 늦음, 오판을 각각 복구한다
수신 결과를 모른 client가 재전송하면 같은 클릭이 여러 번 도착합니다.
idle partition 또는 source 지연으로 window가 닫히지 않고 state가 증가합니다.
초대형 캠페인이 한 partition을 과열시켜 checkpoint와 P99를 악화시킵니다.
정상 클릭이 대량 invalid 처리되거나 retraction이 급증합니다.
publisher clock 또는 배치 장애가 정정·backfill 비용과 리포트 흔들림을 키웁니다.
retry가 같은 revision을 두 번 써 count가 중복될 수 있습니다.
원본, validity, aggregate, billing close가 서로 다른 범위를 참조합니다.
삭제된 식별 신호가 archive·DLQ·feature store에 남아 규정 위험이 됩니다.
숫자만이 아니라 수치의 신선도와 근거를 관측한다
event-to-receive delay, watermark age, open window 수, late ratio를 publisher·리전·partition별로 봅니다. report에는 watermark와 pending 여부를 함께 표기합니다.
raw → dedupe → validity → base + delta → close의 conservation을 버전별 대조합니다. `click_id` trace에는 token과 원본 IP를 넣지 않습니다.
원본·archive·state·fraud inference·replay·분쟁 조사를 따로 산정합니다. 권한은 ingest, analyst, investigator, billing approver로 분리합니다.
시간 처리와 클릭 계약은 공식 문서로 다시 확인한다
- Apache Flink — Event Time and Watermarks: event time, processing time, watermark의 공식 개념 문서.
- Apache Flink — Windows: time window, trigger, allowed lateness 관련 공식 문서.
- Apache Kafka — Producer Configs: idempotence, acknowledgement, retry 설정의 공식 문서.
- Google Ads API — ClickView: 클릭 조회 리소스의 공식 필드 참조.
- Google Ads — Invalid Activity: invalid activity와 청구 조정에 관한 Google 안내.
- RFC 6749 — OAuth 2.0: 권한 위임 프레임워크의 표준 문서.
작성·검토·참고 자료
참고 자료
- Apache Flink — Event Time and Watermarks — event time, processing time, watermark의 공식 개념 문서.
- Apache Flink — Windows — time window, trigger, allowed lateness 관련 공식 문서.
- Apache Kafka — Producer Configs — idempotence, acknowledgement, retry 설정의 공식 문서.
- Google Ads API — ClickView — 클릭 조회 리소스의 공식 필드 참조.
- Google Ads — Invalid Activity — 광고 클릭의 invalid activity와 청구 조정에 관한 Google 안내.
- RFC 6749 — OAuth 2.0 Authorization Framework — 권한 위임 프레임워크의 표준 문서.
사실 오류·출처 정정은 문의·정정 페이지로 알려 주세요.