Real-time betting analytics¶
Тип материала — референсная архитектура. 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.