數據湖和流匯總
1)目的和價值
Data Lake/Lakehouse是長期存儲和大規模讀取的基礎層,其中:- 產品/遊戲/付款的流量按原樣降落在Bronze中。
- Silver通過提供一致的密鑰和質量來規範化和豐富。
- Gold是用於BI,調節劑,防凍劑/RG的聚合店面(包括real -/near-real-time)。
在Lakehouse上匯總線程會產生:低延遲報告,可預測的成本,可重復性和前瞻性。
2)參考體系結構
1.Ingest/Edge: HTTP/gRPC, OTel, batch endpoints → шина (Kafka/Redpanda).
2.Bronze(僅限append-only):對象存儲+ACID表(Delta/Iceberg/Hudi),按日期/market/tenant分期付款;存儲原始付費。
3.流計算:Flink/Spark/Beam-窗口單元,CEP,dedup,在線外觀。
4.Silver (clean/conform):貨幣標準化/時間區、FK/參考書、用於測量的 SCD。
5.Serving/OLAP: ClickHouse/Pinot/Druid-面板的實例化分鐘/秒組合。
6.黃金(serve):白天/小時店面、監管切口、不可改變的出口包裝(WORM)。
7.控制輪廓:Schema Registry, DQ代碼,lineage,目錄,secrety/KMS, RBAC/ABAC。
3)合同和計劃
Schema-first: JSON/Avro/Protobuf;必填字段:'event_time (UTC)'、'event_id'、'trace_id'、'user_pseudo_id'、'market'、'schema_version'。
演變:反向兼容→添加無效;破解→ '/v2'+雙重記錄。
目錄: 域名描述,所有者,SLA新鮮度,DQ規則,lineage.
4)將溪流降落到湖中
Exactly-once在底部:on-least-once出版+Idempotent sink(MERGE/upsert by 'event_id')。
Dedup: Stream+Silver中的stateful。
文件編譯:小型文件→定期OPTIMIZE/VACUUM讀取和成本。
時間旅行:包括調試、中繼和審核。
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)流匯總: 窗戶和水上市場
窗口是:- Tumbling是用於穩定面板的固定(例如1分鐘/5分鐘)。
- Hopping-「平滑」度量的重疊(步驟<窗口)。
- Session-非活動行為中斷。
- Watermarks:管理後期數據(通常為2-5分鐘),發布前/校正規則。
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)聚合物實現
OLAP引擎(ClickHouse/Pinot/Druid):存儲用於行車記錄儀和操作分析的分鐘/秒單元。
Lakehouse Gold:保留每日津貼/小時切片,用於報告和合並(可重復性)。
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;
黃金-白天切片(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)Silver: 正常化和協調
時間和貨幣:'event_time (UTC)'、'amount_base'、'fx_rate_used'、'fx_source'。
密鑰/參考:'user_pseudo_id'、'game_id'、'provider_id'、'market'。
SCD II:測量歷史化(users/games/providers/RG/KYC)。
DQ規則:鍵的唯一性,參考書,和數範圍,時間有效性。
8)匯總註冊表和「正確」定義
語義層:單個GGR/NGR公式,投註/獲勝,轉換,ARPPU,latency p95。
測試度量:「metric_version」和「as-of」計算。
基座卡:所有者,公式,來源,準備就緒的SLA。
9)Exactly-once/等效性和順序
總線:at least-once+分黨(本地順序)。
處理:通過「event_id」(TTL 24-72 h),SER/窗口運算符進行調整。
Sink:事務性商品或idempotent upsert/merge。
Outbox/Inbox:從OLTP中發布具有保修期的域事件。
10)後期數據和調整
Allowed lateness: 2-5分鐘用於操作展示;Gold的每日重新裝配。
校正:在OLAP和Gold rebor(idempotent)中發射前。
標誌:'late=true'、'correction_of= <event_id>'用於審核。
11)可觀察性與DQ
SLI/SLO(地標):- p95 ingest→1-分鐘≤ 2-5 c;黃金日報準備到06:00 lock。
- Completeness ≥ 99.5%;Schema validity ≥ 99.9%;Trace coverage ≥ 98%.
- Piplines度量標準:lag/throughput/busy time/state size, late-ratio, dup-rate.
- DQ-dashbords: Freshness/Completeness/Validity,損失漏鬥,熱鍵卡。
- 線性:從青銅到黃金/出口的路徑;變更時的影響分析。
12)隱私、居住、安全
PII最小化:別名,單獨的安全映射。
居住地:EEA/UK/BR-單獨的目錄和加密密鑰;無故禁止跨區域合作。
加密:transit中TLS;KMS/CMK at-rest;出口簽名+監管下的WORM。
DSAR/RTBF/Legal Hold:選擇性編輯、凍結刪除、可審核訪問。
13)生產力和成本
參與:按日期/市場/特南特分列;按常用過濾屬性聚類/Z順序。
復合:消除小文件,常規OPTIMIZE/VACUUM。
實現:每分鐘/秒-在OLAP中;每天/每小時-黃金。
Tiered storage: hot/warm/cold, SLA恢復,chargeback by commands (成本/GB,成本/查詢).
聚合/草圖:HyperLogLog/approx-distinct在可以接受的位置。
14)示例(片段)
Flink CEP-存款結構(10分鐘):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-加載到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相等:
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)流程和RACI
R (Responsible):
數據平臺(Lakehouse/目錄/ACID,堆積),
流化(聚合/CEP/dedup),
域分析(度量/黃金)。
A (Accountable): Head of Data/CDO.
C (Consulted): Compliance/Legal/DPO (PII/residency/Legal Hold), Finance (FX/GGR), SRE (SLO/стоимость), Security.
I (Informed): BI/產品/營銷/運營。
16)實施路線圖
MVP(3-5周):1.Lakehouse Bronze/Silver(ACID表),來自Kafka的ingest,註冊計劃。
2.OLAP中的基本流單元(1-5分鐘);金色展示櫃。ggr_daily (D+1至06:00)。
3.Payments/Gameplay的DQ,Freshness/Completeness dashbords。
4.壓縮/OPTIMIZE,最小成本度量和Alerta lag/late/dup。
第二階段(5-10周):- 銀擴展(用於users/games/providers的SCD II),線性和影響分析。
- 異步外觀(RG/KYC/ASN/BIN),後期校正管理。
- 語義層度量,導出規則(WORM/簽名)。
- 多區域,DR/繼電器模擬器,自動調諧窗口和水上市場。
- Cost-dashbords,chargeback/配額,tiered存儲和存檔。
- 自動生成店面文檔和度量卡。
17)售前支票清單
- 登記冊中的計劃和合同;背對背測試為綠色。
- 包括dedup,watermark/allowed lateness,DLQ。
- Compaction/OPTIMIZE/VACUUM是按計劃配置的。
[] SLO: p95 ingest→minute-view, Gold до 06:00;Alerta lag/late/dup/state size。
- DQ規則是活躍的;從青銅到出口都可以看到線程。
[] RBAC/ABAC и KMS;居住和DSAR/RTBF/Legal Hold測試。
- 控制成本(成本/GB,成本/查詢,冷份額),中繼限制。
18)反模式和風險
一個表中原始數據和報告數據的混合:違反可重復性。
缺乏堆積:小文件爆炸→昂貴的查詢。
「追溯」計算FX:打破歷史記錄和報告。
沒有watermarks/late polity:「漂浮」店面和alerta。
Full reload不需要:使用註釋/MERGE和調整。
PII在分析中:將mappings分開,包括CLS/RLS。
19)詞匯表(簡短)
Lakehouse是數據湖+ACID表和SQL引擎。
Bronze/Silver/Gold-原始/規範化/伺服層。
Watermark是事件時間窗口就緒的邊界。
Materialized View是一個預期的快速閱讀展示。
時間旅行-閱讀表格的歷史版本。
WORM是出口文物的不可變存儲。
20)結果
具有正確流匯總的數據湖是層和合同的學科:「原樣」的青銅,用於正常化和質量的Silver,用於分鐘面板的OLAP,用於可重現報告的金色。通過管理窗口和水廠、重復數據消除和堆叠、隱私和成本,您可以獲得快速、可驗證和兼容的產品、合規性和運營管理展示。