GH GambleHub

Lacs de données et agrégation des flux

1) Destination et valeur

Data Lake/Lakehouse est une couche de support pour le stockage à long terme et la lecture à grande échelle, où :
  • Les flux des produits/jeux/paiements atterrissent dans Bronze « tel quel ».
  • Silver normalise et enrichit en fournissant des clés cohérentes et de qualité.
  • Gold - vitrines agrégées (y compris real-/near-real-time) pour BI, régulateur, antifrode/RG.

L'agrégation des flux à Lakehouse donne : faible latence des rapports, coût prévisible, reproductibilité et forensisme.

2) Architecture de référence

1. Ingest/Edge: HTTP/gRPC, OTel, batch endpoints → шина (Kafka/Redpanda).
2. Bronze (append-only) : stockage objet + tables ACID (Delta/Iceberg/Hudi), lots par date/market/tenant ; stocker le payload d'origine.
3. Stream Compute : Flink/Spark/Beam - unités de fenêtre, CEP, dedup, online-lookups.
4. Silver (clean/confort) : normalisation des monnaies/temporisation, FK/handbook, SCD pour les mesures.
5. Serving/OLAP : ClickHouse/Pinot/Druid sont des unités de minutes/secondes matérialisées pour les panneaux.
6. Gold (serve) : vitrines diurnes/horaires, tranches réglementaires, paquets d'exportation immuables (WORM).
7. Contours de contrôle : Schema Registry, DQ-as-code, lineage, catalogues, secrets/KMS, RBAC/ABAC.

3) Contrats et régimes

Schema-first: JSON/Avro/Protobuf; champs obligatoires : 'event _ time (UTC)', 'event _ id', 'trace _ id', 'user _ pseudo _ id', 'market', 'schema _ version'.
Évolution : back-compatible → ajouter nullable ; breaking → '/v2 '+ double enregistrement.
Catalogue : description du domaine, propriétaire, SLA de fraîcheur, règles DQ, lignage.

4) Atterrissage des débits dans le lac

Exactly-once au fond : publication at-least-once + sink idempotent (MERGE/upsert par 'event _ id').
Dedup : stateful en stream + singularité en Silver.
Compaction de fichiers : petits fichiers → régulier OPTIMIZE/VACUUM pour la lecture et le coût.
Temps-voyage : comprend le débogage, le repli et l'audit.

Exemple de partitionnement Iceberg (idée DDL) :
sql
CREATE TABLE bronze. payment_events (
event_id STRING, user_pseudo_id STRING, currency STRING,
amount DECIMAL(18,2), market STRING, event_time TIMESTAMP, payload STRING
)
PARTITIONED BY (days(event_time), market);

5) Agrégation de flux : fenêtres et watermarks

Fenêtres :
  • Tumbling - fixe (par exemple 1 min/5 min) pour les panneaux stables.
  • Hopping : Chevauchement (étape
  • Session - ruptures de comportement par inactivité.
  • Watermarks : contrôle des données late (généralement 2-5 minutes), règles de pré-émission/correction.
Flink SQL - 1 minute de dépôts par marché :
sql
SELECT market,
TUMBLE_START(event_time, INTERVAL '1' MINUTE) AS ts_min,
COUNT() AS deposits_1m,
SUM(amount_base) AS sum_1m
FROM silver. payments
GROUP BY market, TUMBLE(event_time, INTERVAL '1' MINUTE);

6) Matérialisation des agrégats

Moteur OLAP (ClickHouse/Pinot/Druid) : stocke des unités minutes/secondes pour les dashboards et les analyses opérationnelles.
Lakehouse Gold : stocke les tranches journalières/horaires pour le signalement et la sverok (reproductibilité).

ClickHouse - vue materialized (GGR par minute) :
sql
CREATE MATERIALIZED VIEW mv_ggr_1m
ENGINE = AggregatingMergeTree()
PARTITION BY toDate(event_time)
ORDER BY (toStartOfMinute(event_time), market, provider_id) AS
SELECT toStartOfMinute(event_time) AS ts_min,
market,
provider_id,
sumState(stake_base) AS s_stake,
sumState(payout_base) AS s_payout
FROM stream. game_events
GROUP BY ts_min, market, provider_id;
Gold - coupe diurne (Lakehouse) :
sql
CREATE OR REPLACE VIEW gold. ggr_daily AS
SELECT
DATE(event_time) AS event_date,
market, provider_id,
SUM(stake_base) AS stakes_eur,
SUM(payout_base) AS payouts_eur,
SUM(stake_base) - SUM(payout_base) AS ggr_eur
FROM silver. fact_game_financials
GROUP BY 1,2,3;

7) Argent : Normalisation et alignement

Heure et devise : 'event _ time (UTC)', 'amount _ base', 'fx _ rate _ used', 'fx _ source'.
Clés/guides : 'user _ pseudo _ id', 'game _ id', 'provider _ id', 'market'.
SCD II : historique des mesures (users/games/providers/RG/KYC).
Règles DQ : unicité des clés, références, fourchettes de montants, validation temporelle.

8) Registre des agrégats et définitions « correctes »

Semantic Layer : formule unique GGR/NGR, paris/gains, conversion, ARPPU, latitude p95.
Versioner les métriques : 'metric _ version' et 'as-of' calcul.
Cartes de dock : owner, formule, sources, SLA prêt.

9) Exactly-once/idempotence et ordre

Bus : at-least-once + partitionnement (ordre local).
Traitement : dedup par 'event _ id' (TTL 24-72h), opérateurs de fenêtre/CER avec réglages.
Sink : commits transactionnels ou idempotent upsert/merge.
Outbox/Inbox : publication d'événements de domaine à partir d'OLTP avec garantie.

10) Données latines et ajustements

Allowed lateness : 2-5 min pour les vitrines opérationnelles ; Transbordement journalier pour Gold.
Corrections : pré-émissions en OLAP et en or (idempotent).
Indicateurs : 'late = true', 'correction _ of = <event _ id>' pour l'audit.

11) Observabilité et DQ

SLI/SLO (repères) :
  • p95 ingest→1 -min vitrine ≤ 2-5 c ; Gold Daily est prêt avant 06:00 lok.
  • Completeness ≥ 99. 5%; Schema validity ≥ 99. 9%; Trace coverage ≥ 98%.
  • Mesures des piplines : lag/throughput/busy time/state size, late-ratio, dup-rate.
  • DQ-dashboards : Freshness/Completeness/Validity, entonnoir de perte, carte de clés « chaudes ».
  • Lineage : route de Bronze à Gold/Export ; analyse d'impact en cas de changement.

12) Vie privée, résidence, sécurité

Minimisation des PII : pseudonyme, mapping sécurisé séparé.
Résidence : EEA/UK/BR - répertoires séparés et clés de cryptage ; interdiction des join's cross-régionaux sans raison.
Cryptage : TLS en transit ; KMS/CMK at-rest; signatures d'exportation + WORM dans le cadre de la réglementation.
DSAR/RTBF/Legal Hold : édition sélective, gel des suppressions, accès audités.

13) Productivité et coût

Lot : par date/marché/tenant ; clustering/Z-order sur des attributs souvent filtrables.
Compaction : élimination des petits fichiers, OPTIMIZE/VACUUM régulier.
Matérialisation : minutes/secondes - en OLAP ; 24/heures - en or.
Tiered storage : hot/warm/cold, SLA de récupération, chargeback par commande (cost/GB, cost/query).
Préagrégation/sketch : HyperLogLog/approx-distinct si acceptable.

14) Exemples (fragments)

Flink CEP - structuration des dépôts (10 min) :
python if count_deposits(window=10MIN) >= 3 \
and sum_deposits(window=10MIN) > THRESH \
and all(d. amount < REPORTING_LIMIT for d in window_events):
emit_alert("AML_STRUCTURING", user_id, snapshot())
SQL - dedup lors du chargement dans Silver :
sql
CREATE TABLE silver. payments AS
SELECT EXCEPT(rn) FROM (
SELECT p., ROW_NUMBER() OVER (PARTITION BY event_id ORDER BY event_time) rn
FROM bronze. payment_events p
) WHERE rn = 1;
Iceberg/Delta - MERGE idempotent :
sql
MERGE INTO silver. fact_bets s
USING stage. fact_bets_delta d
ON s. bet_id = d. bet_id
WHEN MATCHED THEN UPDATE SET
WHEN NOT MATCHED THEN INSERT;

15) Processus et RACI

R (Responsible):
  • Data Platform (Lakehouse/catalogue/ACID, compaction),
  • Streaming (agrégats/CEP/dedup),
  • Domain Analytics (métriques/Or).
  • A (Accountable): Head of Data/CDO.
  • C (Consulted): Compliance/Legal/DPO (PII/residency/Legal Hold), Finance (FX/GGR), SRE (SLO/стоимость), Security.
  • I (Informed) : BI/Produit/Commercialisation/Opérations.

16) Feuille de route pour la mise en œuvre

MVP (3-5 semaines) :

1. Lakehouse Bronze/Silver (tables ACID), ingest de Kafka, registry schémas.

2. Unités de base (1-5 min) en OLAP ; la vitrine Gold. ggr_daily (D + 1 à 06:00).

3. DQ-as-code pour Payments/Gameplay, dashboards Freshness/Completeness.

4. Compaction/OPTIMIZE, métriques cost minimales et alerts lag/late/dup.

Phase 2 (5-10 semaines) :
  • Extension Silver (SCD II pour users/games/providers), lineage et analyse d'impact.
  • Lookups asynchrones (RG/KYC/ASN/BIN), contrôle late-correction.
  • Couche sémantique de métriques, règlement d'exportation (WORM/signatures).
Phase 3 (10-16 semaines) :
  • Multi-région, DR/replay simulateur, auto-tuning fenêtres et watermarks.
  • Cost-dashboards, chargeback/quotas, stockage tiered et archivage.
  • Autogénération de la documentation des vitrines et des cartes métriques.

17) Chèque-liste avant la vente

  • Régimes et contrats inscrits au registre ; les tests back-compat sont verts.
  • Inclus : dedup, watermark/allowed lateness, DLQ.
  • Compaction/OPTIMIZE/VACUUM sont configurés comme prévu.
  • SLO: p95 ingest→minute-view, Gold до 06:00; alerte lag/late/dup/state size.
  • Les règles DQ sont actives ; lineage visible de Bronze aux exportations.
  • RBAC/ABAC и KMS; résidence et DSAR/RTBF/Legal Hold testés.
  • Coût sous contrôle (cost/GB, cost/query, part cold), limites de relais.

18) Anti-modèles et risques

Mélange des données brutes et des données de rapport dans un seul tableau : perturbe la préducibilité.
Manque de compaction : explosion de petits fichiers → demandes coûteuses.
Calcul FX « rétroactif » : brise l'historique et les rapports.
Pas de watermarks/late-policy : les vitrines et les alertes « flottent ».
Reload complet sans besoin : utilisez des incréments/MERGE et des ajustements.
PII dans l'analyse : garder les mappings séparés, inclure CLS/RLS.

19) Glossaire (bref)

Lakehouse - data lake + tables ACID et moteur SQL.
Bronze/Argent/Or - nappes brutes/normalisées/servinières.
Watermark est la limite de disponibilité des fenêtres par event-time.
Materialized View est une vitrine préfabriquée pour une lecture rapide.
Time-travel - lecture des versions historiques des tables.
WORM est le stockage immuable des artefacts d'exportation.

20) Résultat

Le lac de données avec l'agrégation de stream correcte est une discipline de couches et de contrats : Bronze « tel quel », Argent pour la normalisation et la qualité, OLAP pour les panneaux de minutes, Or pour les rapports reproductibles. En gérant les fenêtres et watermarks, le dédoublement et la compacte, la vie privée et le coût, vous obtenez des vitrines rapides, vérifiables et compressibles pour le produit, la compacte et la gestion opérationnelle.

Contact

Prendre contact

Contactez-nous pour toute question ou demande d’assistance.Nous sommes toujours prêts à vous aider !

Telegram
@Gamble_GC
Commencer l’intégration

L’Email est obligatoire. Telegram ou WhatsApp — optionnels.

Votre nom optionnel
Email optionnel
Objet optionnel
Message optionnel
Telegram optionnel
@
Si vous indiquez Telegram — nous vous répondrons aussi là-bas.
WhatsApp optionnel
Format : +code pays et numéro (ex. +33XXXXXXXXX).

En cliquant sur ce bouton, vous acceptez le traitement de vos données.