Ροή ροής
Τι είναι το Streaming
Το streaming είναι μια συνεχής αντίδραση σε ατελείωτες ακολουθίες γεγονότων (καταγραφή συναλλαγών, κλικ, πληρωμές, τηλεμετρία), με ελάχιστη καθυστέρηση και εγγύηση ότι οι καταστάσεις είναι σωστές. Σε αντίθεση με την παρτίδα, όπου «παίρνουμε όλα τα συσσωρευμένα κατά τη διάρκεια της περιόδου», το ρεύμα επεξεργάζεται τα δεδομένα καθώς φτάνει, διατηρεί την κατάσταση και λαμβάνει υπόψη το χρόνο του γεγονότος.
Βασικές έννοιες
Το γεγονός είναι ένα αμετάβλητο γεγονός με 'event _ time' και μοναδικό 'event _ id'.
Χρόνος εκδήλωσης έναντι χρόνου επεξεργασίας - ο πρώτος προέρχεται από την πηγή, ο δεύτερος - όταν ο χειριστής είδε πραγματικά το γεγονός.
- Περιστροφή, Hopping/Sliding, συνεδρία.
- Υδατογραφήματα - μια εκτίμηση ότι «γεγονότα πριν από την άφιξη του Τ», σας επιτρέπουν να κλείσετε τα παράθυρα και να περιορίσετε την αναμονή για καθυστερημένα δεδομένα.
- Καθυστέρηση - γεγονότα με χρόνο 'event _ time' μικρότερο από το τρέχον υδατογράφημα. συχνά εφαρμόζονται κανόνες για το φινίρισμα.
- Κατάσταση - τοπικοί πίνακες/κατάσταση με πλήκτρα για συγκεντρωτικά μεγέθη, ενώσεις, αφαίρεση.
- Αντίθλιψη - πίεση σε περίπτωση υπέρβασης της κατάντη διακίνησης. ελέγχεται με πρωτόκολλο και προσκρουστήρες.
Αρχιτεκτονική βάση
1. Πηγή: μεσίτης εκδηλώσεων (Kafka/NATS/Pulsar), CDC από DB, ουρές αναμονής, αρχεία/συλλέκτες καταγραφής.
2. Κινητήρας ροής: υπολογίζει παράθυρα, συγκεντρωτικά στοιχεία, joyns, μοτίβα (CEP), διαχειρίζεται σημεία κατάστασης και ελέγχου.
3. Νεροχύτης: βάση δεδομένων OLTP/OLAP, μηχανή αναζήτησης, κρύπτη, θέματα, αποθήκες για εκθεσιακές βάσεις/αναφορές.
4. Μητρώο Schema: έλεγχος της εξέλιξης του ωφέλιμου φορτίου και της συμβατότητας.
5. Παρατηρησιμότητα: μετρήσεις, ιχνηλάτηση, κούτσουρα, πίνακες ταμπλό υστέρων και υδατογραφημάτων.
Χρονική σημασιολογία και τάξη
Πάντοτε προτιμάτε το χρόνο των γεγονότων: αυτό είναι το μόνο αμετάβλητο για καθυστερήσεις και διακοπές.
Τα γεγονότα μπορούν να βγουν εκτός λειτουργίας. η παραγγελία είναι εγγυημένη μόνο εντός του κλειδιού του μέρους.
- κλείσιμο παραθύρων και εκπομπή αποτελεσμάτων·
- περιορίζουν «το πόσο περιμένουμε για» καθυστερημένα γεγονότα ('επιτρέπεται _ καθυστέρηση').
- Για τα καθυστερημένα γεγονότα, χρησιμοποιήστε ανακλήσεις/αναβαθμίσεις: επανυπολογισμός των συγκεντρωτικών στοιχείων και διορθωτικά συμβάντα.
Κατάσταση και αξιοπιστία
Κατάσταση πλήκτρου: τα δεδομένα των συγκεντρωτικών μεγεθών (αθροίσματα, μετρητές, δομές για την αφαίρεση) ανακατεύονται από κλειδιά.
Σημείο ελέγχου/σημείο Savepoint - στιγμιότυπα περιοδικής κατάστασης για ανάκτηση· σημείο savepoint - υπό διαχείριση στιγμιότυπο για την έκδοση κώδικα μεταναστεύσεις.
- συναλλαγή «ανάγνωση-επεξεργασία-εγγραφή» (δεσμευτικός νεροχύτης + θέση ανάγνωσης)·
- idempotent νεροχύτες (upsert/merge) + πίνακες αφαίρεσης·
- με την έκδοση συγκεντρωτικών μεγεθών (αισιόδοξο νόμισμα).
Windows, ομαδοποιήσεις, συνδέσεις
Παράθυρα:- Περιστροφή: απλές περιοδικές εκθέσεις (λεπτό, ώρα).
- Μετρήσεις «ολίσθησης» (σε 5 λεπτά σε προσαυξήσεις ενός λεπτού).
- Σύνοδος: φυσικό για τις συνθέσεις και την καταπολέμηση της απάτης.
- Αθροίσεις: άθροισμα/καταμέτρηση/avg/περίπου διακριτή (HyperLogLog), εκατοστημόρια (TDiest/CKMS).
- Συνδεθείτε με το Stream-Stream: απαιτεί να ρυθμίσετε και τις δύο πλευρές από το κλειδί και το χρόνο, σεβαστείτε το 'allowed _ skew'.
- Σύνδεση Stream-Table (KTable) -Επισυνάπτει κατάλογο ή τρέχουσα κατάσταση (για παράδειγμα, «ενεργά όρια χρήστη»).
Εργασία με στοιχεία με ετικέτα και διπλά δεδομένα
Αφαίρεση: με 'event _ id' ή '(producer_id, ακολουθία)'. Φυλάσσετε τα «ορατά» πλήκτρα με το TTL ≥ το επανατοποθετημένο παράθυρο.
Μετεπεξεργασία παραθύρων για το 'X' μετά το κλείσιμο (αναδρομές/upserts).
Ψευδή αντίγραφα: ρυθμίστε τα συγκεντρωτικά μεγέθη ιδεωδώς και διορθώστε το «ALREADY_APPLIED» στα κούτσουρα.
Κλίμακα και απόδοση
Πλήκτρο: παρέχει παραλληλισμό. Παρακολουθήστε για καυτά κλειδιά.
Backpressure: περιορισμός του παραλληλισμού, χρήση παρτίδων και συμπίεση κατά τη δημοσίευση.
Υδατογραφήματα: Μην είστε πολύ επιθετικοί - τα σκληρά υδατογραφήματα μειώνουν την αναμονή αλλά αυξάνουν το ποσοστό των καθυστερημένων ενημερώσεων.
Κατάσταση: επιλέξτε το μορφότυπο (RocksDB/state store/in memory) λαμβάνοντας υπόψη το μέγεθος και τα πρότυπα πρόσβασης. καθαρίζει το TTL.
Αυτόματη κλιμάκωση: lag, CPU, state size, GC time.
Αξιοπιστία και επανεκκίνηση
Idempotent νεροχύτη ή συναλλαγή που δεσμεύονται με τον προσδιορισμό όφσετ είναι η βάση της ορθότητας.
Επιτρέπεται η επανεπεξεργασία μετά την επανεκκίνηση. το αποτέλεσμα πρέπει να παραμείνει «ακριβώς μία φορά».
DLQ/χώρος στάθμευσης: αποστολή αρχείων προβλημάτων σε ξεχωριστό νήμα με λόγους· παρέχουν επανεπεξεργασία.
Παρατηρησιμότητα (τι να μετρήσετε)
Lag ανά πηγή (ανά ώρα και ανά μήνυμα).
Υδατογράφημα/τρέχων χρόνος εκδήλωσης και αναλογία καθυστερημένων γεγονότων.
Χειριστές διακίνησης/καθυστέρησης, p95/p99 end-to-end.
Μέγεθος κατάστασης/rocksdb I/O, ρυθμός/διάρκεια σημείου ελέγχου.
Ρυθμός DLQ, ποσοστό απεξάρτησης/επαναπροσδιορισμού.
CPU/GC/σωρός, χρόνος παύσης.
Ασφάλεια και συμμόρφωση
Ταξινόμηση δεδομένων: σήμανση PII/PCI σε διαγράμματα, αποθήκευση του ελάχιστου, κατάσταση κρυπτογράφησης και στιγμιότυπα.
Έλεγχος πρόσβασης: χωριστές ACL για πίνακες θέματος/κατάστασης και για καταβόθρες.
Επιφυλάξεις: συνάδουν με τις νομικές απαιτήσεις (GDPR/δικαίωμα λήθης).
Έλεγχος: log 'event _ i ,' trace _ id ', αποτέλεσμα:' APPLIED/ΉΔΗ _ APPLIED/RETRIEVED '.
Πρότυπα εφαρμογής
1. CDC → ομαλοποίηση → domain events: μην μεταδίδετε ακατέργαστες αλλαγές βάσης δεδομένων, χαρτογράφηση σε κατανοητά επιχειρηματικά γεγονότα.
2. Outbox για τους παραγωγούς: γεγονός συναλλαγής + γεγονός - σε μία συναλλαγή βάσης δεδομένων.
3. Πυρήνας έναντι εμπλουτισμένου: ελάχιστο ωφέλιμο φορτίο σε κρίσιμη ροή, εμπλουτισμός - ασύγχρονο.
4. Φιλικότητα αναπαραγωγής: οι προβολές/προβολές πρέπει να επανασυναρμολογηθούν από το ημερολόγιο.
5. Ιδιαιτερότητα ανά σχεδιασμό: πλήκτρο λειτουργίας/γεγονότος, αναβαθμισμένα συστήματα, εκδόσεις συγκεντρωτικών μεγεθών.
Δοκιμές
Μονάδα/Ακίνητη περιουσία: αναλλοίωτες των συγκεντρωτικών μεγεθών και των μετασχηματισμών.
Δοκιμές ροής: σταθερή ροή συμβάντων με εκτός λειτουργίας και επαναλήψεις → ελέγχους παραθύρων και απεμπλοκής.
Χρυσά παράθυρα: παράθυρα αναφοράς/συγκεντρωτικά στοιχεία και επιτρεπόμενες καθυστερημένες ρυθμίσεις.
Ένεση βλάβης: πτώση μεταξύ «καταγεγραμμένου αποτελέσματος» και «δεσμευμένης αντιστάθμισης».
Επανάληψη δοκιμών: επανασύνδεση της βιτρίνας από την αρχή του ημερολογίου = τρέχουσα κατάσταση.
Κόστος και βελτιστοποίηση
Τα παράθυρα και το υδατογράφημα επηρεάζουν την καθυστέρηση/τους πόρους: όσο μακρύτερο είναι το παράθυρο και τόσο μεγαλύτερο είναι το 'allowed _ lateness', τόσο μεγαλύτερη είναι η κατάσταση.
Κωδικοποιητές και συμπίεση: ζυγός ΚΜΕ/δίκτυο.
Παραγωγή ομαδοποίησης: λιγότερες κλήσεις δικτύου και συναλλαγές.
Πρόωρη διήθηση («pushdown»): απόρριψη της περίσσειας όσο το δυνατόν πλησιέστερα στην πηγή.
Αντιπατερίδια
Συνδεθείτε με το χρόνο επεξεργασίας όπου απαιτείται χρόνος εκδήλωσης → εσφαλμένη ανάλυση.
Έλλειψη ιδιοτροπίας στον νεροχύτη → διπλά αποτελέσματα κατά την επανεκκίνηση.
Παγκόσμια «μεγάλα κλειδιά»: μια θερμή κατάτμηση σπάει τον παραλληλισμό.
Ακατέργαστα CDC ως δημόσια γεγονότα: διαρροή σχημάτων DB, ευπάθεια στην εξέλιξη.
Όχι DLQ: «δηλητηριώδη» μηνύματα μπλοκάρουν ολόκληρο τον αγωγό.
Σταθερή σκληρή καθυστέρηση αντί για υδατογράφημα: είτε αιώνια αναμονή είτε απώλεια δεδομένων.
Παραδείγματα τομέων
Πληρωμές/Χρηματοδότηση
Πληρωμή ρεύματος. ", παράθυρα για την καταπολέμηση της απάτης (συνεδρία + CEP), παππούς της" επιχείρησης _ id ".
Επακριβώς εφικτό όταν αναρτάται στο λογιστικό βιβλίο (upsert + version).
Μάρκετινγκ/Διαφήμιση
Συρόμενα παράθυρα από CTR/μετατροπές, κλικ σύνδεσης και εντυπώσεις με ανοχή '± Δ t', συσσώρευση για προσφορά.
iGaming/επιγραμμικές υπηρεσίες
Ισορροπία/όρια σε πραγματικό χρόνο, αποστολές/επιτεύγματα (παράθυρα συνόδου), πρότυπα και προειδοποιήσεις για την καταπολέμηση της απάτης.
Μίνι υποδείγματα (ψευδο-κωδικός)
Παράθυρο με υδατογραφήματα και καθυστερημένες ενημερώσεις
pseudo stream
.withEventTime(tsExtractor)
.withWatermark(maxAllowedLag=2m)
.window(TUMBLING, size=1m, allowedLateness=30s)
.keyBy(user_id)
.aggregate(sum, retractions=enable)
.sink (upsert_table )//idempotent upsert by (user_id, window_start)
Νεροχύτης συναλλαγής με σταθεροποίηση όφσετ
pseudo begin tx upsert target_table using event, key=(k)
update consumer_offsets set pos=:pos where consumer=:c commit
Κατάλογος ελέγχου παραγωγής
- Προσδιορισμός του χρόνου εκδήλωσης και της στρατηγικής υδατογραφήματος. επιλέγονται τα παράθυρα και το 'allowed _ lateness'.
- Idempotent νεροχύτη ή συναλλαγή δεσμεύονται με αντιστάθμιση.
- Ενεργοποιούνται το μητρώο Schema και οι τρόποι συμβατότητας. προσθετική εξέλιξη.
- Μετρήσεις: lag, watermark, p95/p99, DLQ, κατάσταση μεγέθους, διάρκεια σημείου ελέγχου.
- Δοκιμές: εκτός λειτουργίας, αντίγραφα, επανεκκίνηση, επανάληψη.
- PII/πολιτικές διατήρησης για κρατικά και στιγμιότυπα.
- Σχέδιο κλιμάκωσης και στρατηγικές αντίθλιψης.
- Τεκμηρίωση συμβάσεων παραθύρων και προσαρμογών (καθυστερημένες επικαιροποιήσεις).
ΣΥΧΝΈΣ ΕΡΩΤΉΣΕΙΣ
Απαιτούμενος χρόνος εκδήλωσης
Εάν η ορθότητα των μετρήσεων και η συνέπεια είναι σημαντικές, ναι. Ο χρόνος επεξεργασίας είναι κατάλληλος για τεχνικούς υπολογισμούς/παρακολούθηση, αλλά στρεβλώνει την αναλυτική.
Χρειάζεται ακριβώς μία φορά
Σημείο: για κρίσιμα αποτελέσματα. Πιο συχνά, τουλάχιστον μία φορά + idempotent νεροχύτη είναι αρκετό.
Πώς να επιλέξετε παράθυρα
Βασιστείτε σε επιχειρηματικές SLA: «τελευταία 5 λεπτά» hopping, «συνεδρίες χρηστών » session «, minute reports » tumbling.
Τι να κάνετε με τα καθυστερημένα δεδομένα
Επιτρέψτε την περιορισμένη 'ενεργοποίηση _ καθυστέρηση' και την έκδοση ρυθμίσεων (upsert/retract). Η έκθεση του πελάτη πρέπει να είναι σε θέση να ενημερώσει.
Σύνολο
Εκτός από τη χαμηλή καθυστέρηση, η ροή είναι μια πειθαρχία του χρόνου, της κατάστασης και των συμβάσεων. Η σωστή επιλογή του χρόνου εκδήλωσης, των παραθύρων και των υδατογραφημάτων, συν τα ευφυή αποτελέσματα, την παρατηρησιμότητα και τις δοκιμές καθιστούν τον αγωγό αξιόπιστο, αναπαραγώγιμο και οικονομικό - και δίνουν στις επιχειρήσεις εδώ και τώρα λύσεις, όχι κάθε δεύτερη νύχτα.