Перейти к содержанию

Real-time betting analytics

Раздел 06

Тип материала — референсная архитектура. HYPOTHETICAL — проектные схемы и контракты. INFERENCE — рекомендации и trade-offs.

Бизнес-задача

Показывать volume, exposure и результат без повторного суммирования revisions.

Функциональные требования

Разделить requested, accepted и settled metrics. Учитывать corrections, разные currency и cut.

NFR и критический путь

Dashboard freshness отдельно от финансовой полноты. Backfill не конкурирует с acceptance workload.

Компоненты и поток

flowchart LR
 A["Bet and ledger facts"] --> B["Kafka"] --> C["Window aggregation"] --> D["Analytics projection"] --> E["Dashboard"]

Контракты и владельцы состояния

Facts несут bet_id, revision, effective_time, currency и amount. Ledger и bet store владеют основаниями, dashboard — представлением.

Транзакционные границы

Offset/checkpoint и sink commit согласуются в пределах connector. Ledger write отсутствует в analytics pipeline.

Ordering, deduplication и idempotency

Upsert по bet revision либо signed deltas с unique correction identity. Late correction заменяет вклад или добавляет delta.

Отказ и восстановление

Потерянный sink восстановить в новой generation из raw facts. Перед switch сверить keys, sums и frontier.

Сверка

Проверить missing/duplicate per currency, а не только общий total. Restatement сохраняет старый cut.

Мониторинг и алерты

Watermark, completeness, correction lag и rebuild duration. Для каждого сигнала определить scope, cut и действие оператора. Порог подбирается по согласованному бюджету и наблюдаемой нагрузке.

Технологии и trade-offs

Streaming даёт предварительный результат. Micro-batch упрощает стабильный snapshot и повтор.

Вопросы на собеседовании

Почему суммирование всех revisions неверно? Изменение записи заменяет прежний вклад, если контракт не задаёт delta.

Первичные источники