इवेंट-स्ट्रीमिंग और रियल-टाइम डेटा
(धारा: प्रौद्योगिकी और बुनियादी ढांचा)
संक्षिप्त सारांश
इवेंट-स्ट्रीमिंग उस समय की घटनाओं का प्रसंस्करण और वितरण है। IGaming के लिए, इसका मतलब है दांव, जमा, धोखाधड़ी-विरोधी संकेतों, जिम्मेदार गेम सीमाओं, टूर्नामेंट तालिकाओं और व्यक्तिगत प्रस्तावों पर त्वरित प्रतिक्रिया। बेस ईंटें: इवेंट बस (काफ्का/पल्सर), स्ट्रीमिंग इंजन (फ्लिंक/ksqlDB/स्पार्क स्ट्रीमिंग), ट्रांजेक्शनल डेटाबेस (डेबेज़ियम) से सीडीसी, ऑनलाइन एमएल और रियल-टाइम एनालिटिक्स के लिटिक्स
iGaming में यह महत्वपूर्ण कहाँ है
धोखाधड़ी और जोखिम: <100-300 एमएस में लेनदेन स्कोरिंग, व्यवहार पैटर्न का सहसंबंध, अवरुद्ध और वृद्धि।
जिम्मेदार खेल: सीमा नियंत्रण, हानि दर, असामान्य व्यवहार - अलर्ट और वास्तविक समय ऑटो-प्रतिबंध।
भुगतान: स्थिति वाल्व, वेबहूक पीएसपी, स्मार्ट-रीट्री, बैलेंस अनुमान, एसएलए "टाइम-टू-वॉलेट"।
खेल की घटनाएं: टूर्नामेंट के नेताओं की गणना (फिसलने वाली खिड़कियां), लाइव गेम के दौर, सीआरएम/मार्केटिंग के लिए वास्तविक समय फ़ीड।
निजीकरण: ऑनलाइन सुविधाएँ (RFM, प्रवृत्ति) → ट्रिगर अभियान, सेकंड के भीतर पुश/ईमेल।
ऑपरेशनल एनालिटिक्स: p95/p99 लेटेंसी, फ़नल स्टेप रूपांतरण, प्लेटफ़ॉर्म हेल्थ सिग्नल।
वास्तुशिल्प मॉडल
लैम्ब्डा बनाम कप्पा
लैंबडा: बैच (DWH/ETL) + स्ट्रीमिंग (ऑपरेटिव)। इसके अलावा - लचीलापन और "सस्ता" बीच; शून्य से दोहरा तर्क है।
कप्पा: सब कुछ एक पत्रिका (काफ्का) से एक धारा की तरह है। इसके अलावा - एक एकल कोड, घटना रीप्ले; शून्य से - सख्त बुनियादी ढांचे की आवश्यकता
अभ्यास: महत्वपूर्ण वास्तविक समय के लिए आकृति - कप्पा; रिपोर्टिंग/एमएल प्रशिक्षण के लिए - एक अतिरिक्त बैच सर्किट।
इवेंट पाइपलाइन (संदर्भ)
1. निर्माता: सट्टेबाजी/भुगतान सेवाएं डोमेन इवेंट्स (आउटबॉक्स → काफ्का) प्रकाशित करती हैं।
2. बस: कुंजियों द्वारा भागों के साथ काफ्का ('player _ id', 'bet _ id').
3. सीडीसी: डेबेजियम ओएलटीपी (शेष, सीमा) से स्ट्रीम में परिवर्तन करता है।
4. स्ट्रीमिंग: फ्लिंक/ksqlDB/स्पार्क - एकत्रीकरण, खिड़कियां, CEP, शामिल हों।
5. अनुमान: भौतिक तालिकाएं (काफ्का स्ट्रीम्स स्टेट स्टोर/ksqlDB टेबल/Redis), OLAP (क्लिकहाउस/Druid)।
6. उपभोक्ता: धोखाधड़ी विरोधी, सीआरएम, सूचनाएं, डैशबोर्ड, ट्रिगर वर्कफ़्लो।
डेटा अनुबंध और स्कीमा
एवरो/प्रोटोबुफ + स्कीमा रजिस्ट्री: सख्त अनुबंध, पिछड़े-संगत प्रवासन।
वर्शनिंग: 'डोमेन। घटना। v {n} '; परिवर्तनों को तोड़ ने पर प्
PII: टोकन/एन्क्रिप्शन, मास्किंग, उद्देश्य सीमा (GDPR)।
डिलीवरी शब्दार्थ और पहचान
कम से कम-एक बार एक वास्तविक मानक है (डुप्लिकेट संभव हैं) → आइडेम्पोटेंट-हैंडलिंग की आवश्यकता होती है।
स्ट्रीमिंग में बिल्कुल एक बार: फ्लिंक/स्ट्रीम में काफ्का + ईओएस लेनदेन निर्माता; अधिक महंगा, लागू बिंदु (धन/शेष)।
आउटबॉक्स + सीडीसी: सेवा डेटाबेस से सत्य का एक एकल स्रोत, डबल राइट सुरक्षा।
Dedup: कुंजी ('idempotency _ key'), TTL के साथ deduplication तालिका, upsert/merge.
समय विंडो और "देर से" डेटा
विंडोज़:- टंबलिंग - निश्चित स्लॉट (उदाहरण के लिए, क्रांति का एक मिनट)।
- वेतन वृद्धि में फिसलना (उदाहरण के लिए, 1 मिनट की वेतन वृद्धि में 5 मिनट की विंडो)।
- सत्र - निष्क्रियता से (खिलाड़ीसत्र)।
- वाटरमार्क: इवेंट-टाइम प्रोसेसिंग, विलंबता, डीएलक्यू/साइड-आउटपुट निकासी।
- CEP (कॉम्प्लेक्स इवेंट प्रोसेसिंग): पैटर्न "ए फिर बी इन 3 मिनट", "एम सेकंड में एन इवेंट्स", "रद्द/मुआवजा"।
स्थिति और स्केलिंग
राज्यपूर्ण ऑपरेटर: एकत्रीकरण/जॉयनेस राज्य (RockDB राज्य बैकएंड)।
चेंजेलॉग विषय: विश्वसनीयता और राज्य वसूली।
Backpressure: ऑटो-स्पीड कंट्रोल, सिस्टम पर सीमा।
प्रमुख वितरण: भारी हिटर - कुंजी-नमकीन, तिरछा शमन।
निगरानी और एसएलओ
स्ट्रीम एसएलओ: p99 एंड-टू-एंड लेटेंसी (उदाहरण के लिए, ≤ 2 एस), वैध उपभोक्ता अंतराल, उपलब्धता ≥ 99। 9%.
मेट्रिक्स: थ्रूपुट, पार्टी द्वारा अंतराल, वॉटरमार्क देरी, ड्रॉप/लेट अनुपात, बैकप्रेशर, व्यस्त समय ऑपरेटर, जीसी/जेवीएम।
अलर्ट: डीएलक्यू ग्रोथ, वॉटरमार्क लैग, ईओएस चेकपॉइंट विफलताएं, ऑनलाइन/ऑफ़लाइन रैसिन सुविधाएँ।
ट्रेसिंग: उत्पादक-स्ट्रीम-उपभोक्ता के माध्यम से कोरेलेशनल आईडी ('ट्रेस _ आईडी', 'मैसेज _ आईडी')।
सुरक्षा और अनुपालन
टीएलएस/एमटीएलएस, एसीएल/आरबीएसी विषयों/तालिकाओं पर, संवेदनशील डोमेन का विभाजन (भुगतान/सीसीएम)।
पारगमन/डिस्क पर पीआईआई एन्क्रिप्शन; तिजोरी/SOPS में रहस्य।
डेटा प्रतिधारण और स्थानीयता: क्षेत्र द्वारा भंडारण (यूरोपीय संघ, तुर्की, लैटम), हटाने की नीति।
लेखा परीक्षा: जिसने प्रकाशित/पढ़ा, लिपियों की प्रजनन योग्यता।
उच्च उपलब्धता और डीआर
काफ्का: 'प्रतिकृति। कारक ≥ 3 ',' मिनट। Insync। प्रतिकृतियाँ ',' acks = all ', DRS के लिए क्रॉस-रीजन प्रतिकृति (MM2)।
फ्लिंक/स्ट्रीम: नियंत्रित रिलीज के लिए आवधिक चेकपॉइंट + सेवपॉइंट; एचए-जॉब मैनेजर।
OLAP: खंड प्रतिकृति, प्रतिकृतियां पढ़ें; असफल (खेल दिवस) परीक्षण।
प्रदर्शन और ट्यूनिंग
निर्माता: कसाई ('linger। ms ',' बैच। आकार '), संपीड़न (lz4/zstd)।
उपभोक्ता: सही 'अधिकतम। सर्वेक्षण। अंतराल ', बैकऑफ के दौरान पार्टियों का ठहराव।
विभाजन: लक्ष्य TPS और समानतावाद से पार्टियों की गिनती।
राज्य: RockDB विकल्प (ब्लॉक कैश/राइट बफर), NVMe/IOPS, पिनिंग।
नेटवर्क: 10/25G, TCP ट्यूनिंग, n + 1 सिंक अनुरोध नियंत्रण।
कार्यान्वयन: प्रमुख प्रौद्योगि
शिना: अपाचे काफ्का (विकल्प: पल्सर, रेडपांडा)।
स्ट्रीमिंग: अपाचे फ्लिंक, काफ्का स्ट्रीम्स, ksqlDB, स्पार्क स्ट्रीमिंग
सीडीसी: डेबेजियम (MySQL/Postgres), आउटबॉक्स कनेक्टर।
प्रक्षेपण भंडार: ksqlDB टेबल, काफ्का स्ट्रीम्स स्टेट स्टोर, रेडिस कम विलंबता के लिए, ओएलएपी के लिए क्लिकहाउस/ड्र्यूड/पिनोट।
Fichestor: दावत या खुद - ऑनलाइन (Redis) + ऑफ़ लाइन (Parquet/BigQuery), स्थिरता की गारंटी।
डिजाइन पैटर्न
आउटबॉक्स → काफ्का: डीबी लेनदेन से प्रत्येक डोमेन घटना।
सागास: घटनाओं के माध्यम से मुआवजा; धारा द्वारा ऑर्केस्ट्रे
फैन-आउट: एक घटना - धोखाधड़ी-विरोधी, सीआरएम, एनालिटिक्स, सूचनाएं।
भौतिक दृश्य: लीडरबोर्ड, संतुलन, सीमाएं - तालिकाओं के रूप में जो धारा से अद्यतन हैं।
पुनर्संसाधन: समुच्चय/रेट्रो एनालिटिक्स के पुनर्गणना के लिए विषयों का प्रजनन।
उदाहरण (अवधारणाएँ)
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;
फ्लिंक (स्यूडोकोड): देर से होने वाली घटनाओं के साथ धोखाधड़ी विरोधी स्कोरिंग
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, लैग ≤ Y, उपलब्धता ≥ Z)।
2. योजनाओं और कुंजियों को मानकीकृत करें (player_id/bet_id)।
3. वास्तुकला चुनें (महत्वपूर्ण छोरों के लिए कप्पा)।
4. आउटबॉक्स + सीडीसी कॉन्फ़िगर करें और पीआईआई को अलग करें।
5. विंडो, वॉटरमार्क, लेट-पॉलिसी और डीएलक्यू/साइड आउटपुट सेट करें।
6. धन पथ पर EOS/idempotency सक्षम करें।
7. लैग, वॉटरमार्क, डीएलक्यू के लिए निगरानी और अलर्ट पेश करें।
8. एचए/डीआर और पुनर्संसाधन प्रक्रिया प्रदान करें।
9. फ़ीचर स्टोर तैनात करें और ऑनलाइन/ऑफ़लाइन सिंक करें।
10. खेल-दिवस बिताएं: असफलताओं और वसूली से बाहर काम करना।
एंटी-पैटर्न
सचेत नीति के बिना घटना-समय और प्रसंस्करण-समय का मिश्रण।
स्कीमा गवर्नेंस की कमी - "ब्रेकिंग" रिलीज़।
देर से डाटा और गर्म कुंजियों को अनदेखा किया जा रहा है।
पुनरावृत्ति रणनीति की कमी और विषयों की संस्कृति।
बिना पहचान और ईओएस के दरें/भुगतान।
सारांश
रियल-टाइम स्ट्रीमिंग "एक और परिवहन" नहीं है, बल्कि सोचने का एक तरीका है: डोमेन इवेंट्स, स्पष्ट एसएलओ, डेटा कॉन्ट्रैक्ट, विंडो और स्थिति, सुरक्षा और अवलोकन। IGaming के लिए, टिकाऊ सेट Kafka + Flink/ksqlDB + Debezium + भौतिक दृश्य + फ़ीचर स्टोर है। यह मिलीसेकंड प्रतिक्रियाएं, ऑनलाइन/ऑफ़लाइन एनालिटिक्स स्थिरता और नियंत्रित जटिलता देता है क्योंकि लोड बढ़ ता है।