イベントストリーミングとリアルタイムデータ
(セクション: 技術とインフラ)
概要
イベントストリーミングは、それらが表示された時点でのイベントの処理と配信です。iGamingの場合、これはベット、預金、不正防止信号、責任あるゲーム制限、トーナメント表、個人オファーに対する即座の反応を意味します。ベースレンガ: イベントバス(Kafka/Pulsar)、ストリーミングエンジン(Flink/ksqlDB/Spark Structured Streaming)、トランザクションデータベース(Debezium)のCDC、 オンラインMLおよびリアルタイム分析のための機能ストア(materializalized viewビュー、outビュー、outview)
iGamingで重要なのはどこですか
不正防止とリスク:100〜300ミリ秒を超えるトランザクションのスコアリング、行動パターンの相関、ブロックとエスカレーション。
責任あるゲーム:制限制御、損失率、異常な動作-アラートとリアルタイムの自動制限。
支払い:ステータスバルブ、webhooks PSP、スマートリトライ、バランスプロジェクション、SLA 「time-to-wallet」。
ゲームイベント:トーナメントリーダーの計算(スライディングウィンドウ)、ライブゲームのラウンド、CRM/マーケティングのリアルタイムフィード。
パーソナライズ:オンライン機能(RFM、傾向)→トリガーキャンペーン、数秒以内にプッシュ/メール。
運用分析:p95/p99レイテンシ、ファネルステップ変換、プラットフォームの健康信号。
建築模型
ラムダvsカッパ
ラムダ:バッチ(DWH/ETL)+ストリーミング(操作)。プラス-柔軟性と「安い」bech;マイナスはダブルロジックです。
河童:雑誌(カフカ)の流れのようなものです。プラス-単一のコード、イベントリプレイ。マイナス-より厳しいインフラストラクチャ要件。
練習:重要なリアルタイム輪郭のために-Kappa;レポート/MLトレーニング-追加のバッチ回路。
イベントパイプライン(参考)
1.メーカー:賭け/決済サービスは、ドメインイベント(アウトボックス→カフカ)を公開します。
2.バス:Kafkaとキーによる部品('player_id'、 'bet_id')。
3.CDC: DebeziumはOLTP(バランス、制限)からストリームへの変更をプルします。
4.ストリーミング:Flink/ksqlDB/Spark-集計、ウィンドウ、CEP、 join's。
5.投影:実体化テーブル(Kafka Streams state store/ksqlDB tables/Redis)、 OLAP (ClickHouse/Druid)。
6.消費者:不正防止、CRM、通知、ダッシュボード、トリガーワークフロー。
データ契約とスキーマ
Avro/Protobuf+スキーマレジストリ:厳格な契約、下位互換性のある移行。
バージョン管理:'ドメイン。イベント。v {n}';変更を破ることを禁止します。
PII:トークン化/暗号化、マスキング、目的制限(GDPR)。
配信セマンティクスとidempotency
少なくとも1回は事実上の標準(重複は可能です)→idempotent-handlingが必要です。
正確に一度ストリーミング:Flink/StreamsのKafka+EOSトランザクションプロデューサー;より高価な、ポイント(お金/バランス)を適用します。
Outbox+CDC:サービスデータベースからの真実の単一のソース、二重書き込み保護。
Dedup: key ('idempotency_key')、 TTLによる重複除外テーブル、upsert/merge。
タイムウィンドウと「遅い」データ
Windows:- タンブリング-固定スロット(例えば、1分の革命)。
- ホッピング-増分でスライド(例えば、1分単位で5分単位のウィンドウ)。
- セッション-非アクティブ(プレイヤーセッション)。
- 透かし:イベント時の処理、遅延、DLQ/サイド出力の避難。
- CEP(複雑なイベント処理):パターン「3分でAからB」、 「M秒でNイベント」、「キャンセル/補償」。
ステータスとスケーリング
ステートフル演算子:aggregations/joynes hold state (RocksDBステートバックエンド)。
Changelogトピック:信頼性と状態回復。
背圧:自動速度制御、システムsink/外の限界。
キー分布:ヘビーヒッター→キー塩化、スキュー緩和。
モニタリングとSLO
ストリームSLO: p99エンドツーエンドのレイテンシー(例:≤ 2秒)、有効なコンシューマラグ、可用性≥ 99。9%.
メトリクス:スループット、パーティ別遅延、透かし遅延、ドロップ/レイトレシオ、バックプレッシャー、ビジータイムオペレータ、GC/JVM。
アラート:DLQの成長、透かしの遅れ、EOSチェックポイントの障害、オンライン/オフラインのrassinh機能。
トレース:producer-stream-consumerを介したcorelational ID ('trace_id'、 'message_id')。
安全性とコンプライアンス
TLS/MTLS、トピック/テーブルに関するACL/RBAC、機密ドメインのセグメンテーション(payment/CCM)。
トランジット/ディスク上のPII暗号化。Vault/SOPSの秘密。
データ保存と地域性:地域別ストレージ(EU、トルコ、LatAm)、削除ポリシー。
監査:公開/読み取り、スクリプトの再現性。
高可用性とDR
カフカ: '複製。factor ≥ 3'、'min。insync。replicas'、'acks=all'、 DRRのクロスリージョンレプリケーション(MM2)
Flink/Streams:コントロールリリースの定期チェックポイント+セーブポイント;HA-JobManager。
OLAP:セグメントレプリケーション、読み取りレプリカ;フェイルオーバー(ゲーム日)テスト。
パフォーマンスとチューニング
生産者:butching ('linger。ms'、'バッチ。サイズ')、圧縮(lz4/zstd)。
消費者:正しい'最高。投票。「インターバル」、バックオフ中のパーティーの一時停止。
パーティショニング:ターゲットTPSと並列性からパーティーをカウントします。
状態:RocksDBオプション(ブロックキャッシュ/書き込みバッファ)、NVMe/IOPS、ピン留め。
ネットワーク:10/25G、 TCPチューニング、n+1シンク要求封じ込め。
実装: キーテクノロジー
Shina: Apache Kafka (Pulsar、 Redpanda)。
ストリーミング: Apache Flink、 Kafkaストリーム、ksqlDB、スパーク構造ストリーミング
CDC: Debezium (MySQL/Postgres)、 Outboxコネクタ。
投影リポジトリ:ksqlDBテーブル、Kafka Streamsステートストア、低遅延のためのRedis、 OLAP用のClickHouse/Druid/Pinot。
Fichestor:ごちそうまたは自分の-オンライン(Redis)+オフライン(Parquet/BigQuery)、一貫性の保証。
デザインパターン
Outbox→Kafka: DBトランザクションからの各ドメインイベント。
Sagas:イベントによる補償;ストリームによるオーケストレーション。
ファンアウト:1つのイベント→不正防止、CRM、分析、通知。
実体化ビュー:リーダーボード、バランス、制限-ストリームから更新されるテーブルの形で。
再処理:集計/レトロ分析の再計算のためのトピカルの再現。
例(コンセプト)
ksqlDB: トーナメントリーダー(スライディングウィンドウ)
sql
CREATE STREAM bets_src (
bet_id VARCHAR KEY,
player_id VARCHAR,
amount DOUBLE,
ts BIGINT
) WITH (KAFKA_TOPIC='bets. placed. v1', VALUE_FORMAT='AVRO', TIMESTAMP='ts');
CREATE TABLE leaderboard AS
SELECT player_id,
SUM(amount) AS total_stake,
WINDOWSTART AS win_start,
WINDOWEND AS win_end
FROM bets_src
WINDOW HOPPING (SIZE 10 MINUTES, ADVANCE BY 1 MINUTE)
GROUP BY player_id
EMIT CHANGES;
Flink(疑似コード): 遅延イベントによる不正防止スコア
java stream
.assignTimestampsAndWatermarks(WatermarkStrategy. forBoundedOutOfOrderness(Duration. ofSeconds(10)))
.keyBy(e -> e. playerId)
.window(SlidingEventTimeWindows. of(Time. minutes(5), Time. minutes(1)))
.aggregate(scoreFunction, processWindow)
.sideOutputLateData(lateTag)
.addSink(riskTopic);
スレッド品質テスト
スキームと進化の契約テスト(スキーマレジストリ)。
ロード:ターゲットTPS、 p99、シンク劣化挙動。
失敗/カオス:ブローカー/ノードのドロップ、ネットワーク遅延、スプリットブレイン。
決定論的なリプレイ-トピック→同じ結果を再実行します。
カナリアストリーム:遅延と整合性をチェックするためのループ。
実装チェックリスト
1.SLO (p99 E2E ≤ X c、 lag ≤ Y、 availability ≥ Z)を定義します。
2.スキームとキーを標準化する(player_id/bet_id)。
3.[アーキテクチャ](クリティカルループのKappa)を選択します。
4.outbox+CDCを設定し、PIIを分離します。
5.ウィンドウ、ウォーターマーク、レイトポリシー、DLQ/サイド出力を設定します。
6.マネーパスでEOS/idempotencyを有効にします。
7.遅延、透かし、DLQの監視とアラートを紹介します。
8.HA/DRおよび再処理のプロシージャを提供して下さい。
9.Feature Storeを展開し、オンライン/オフラインで同期します。
10.ゲームデーを過ごす:失敗と回復を解決する。
アンチパターン
意識のないイベントタイムと処理時間を混在させる。
スキーマガバナンス→「breaking」リリースの欠如。
後半のデータとホットキーを無視します。
リプレイ戦略の欠如とトピックのバージョニング。
idempotencyおよびEOSのない料金/支払。
概要
リアルタイムストリーミングは「別のトランスポート」ではなく、ドメインイベント、明確なSLO、データ契約、ウィンドウとステータス、セキュリティと観測性などの考え方です。iGamingの場合、持続可能なセットはKafka+Flink/ksqlDB+Debezium+Materialized Views+Feature Storeです。これは、負荷が増加するにつれて、ミリ秒の反応、オンライン/オフラインの分析の一貫性、制御された複雑さをもたらします。