GH GambleHub

Διαμεσολαβητές μηνυμάτων

1) Γιατί οι μεσίτες μηνυμάτων

Ο μεσίτης αναιρεί τους παραγωγούς και τους καταναλωτές κατά χρόνο/ταχύτητα/αξιοπιστία:
  • Ρυθμιστικό διάλυμα αιχμής και εξομάλυνση, backprescher.
  • Ανάγνωση/εγγραφή κλιμάκωσης ανεξάρτητα.
  • Παρατηρησιμότητα και επανάληψη γεγονότων.
  • Αρχιτεκτονικά πρότυπα: καθοδηγούμενα από εκδηλώσεις, CQRS, προμήθεια εκδηλώσεων, outbox/inbox.

2) Βασικά μοντέλα και όροι

2. 1 Kafka (μοντέλο log)

Θέμα → μέρη (διατεταγμένα αρχεία καταγραφής) → αντισταθμίσεις από τους καταναλωτές.
Ομάδα Καταναλωτών: Διαβάστε τον παραλληλισμό, την εξισορρόπηση των κομμάτων.
Κατακράτηση κατά χρόνο/όγκο. συμπίεση κλειδιού.
Σημασιολογία: ελάχιστο - τουλάχιστον μία φορά, με ρυθμίσεις - ουσιαστικά ακριβώς μία φορά (ευφυείς παραγωγοί + συναλλαγές).
Διάταξη: Εγγυημένη εντός του διαδίκου.

2. 2 NATS (άτομα, χαμηλή καθυστέρηση)

Θέμα (θέμα) με ιεραρχία και wildcards ('foo. «,» foo. >`).
Τρόποι: pub/sub, ομάδες αναμονής (fan-out με διανομή εργασίας), απάντηση αίτησης (fast RPC).
Βασική NATS - εφήμερη, εξαιρετικά χαμηλή καθυστέρηση· JetStream - εμμονή/διατήρηση/επαναλήψεις.
Τάξη: βέλτιστη προσπάθεια, χωρίς ισχυρή παγκόσμια εγγύηση· με JetStream - παραγγελία στο ρεύμα, αλλά σπάνια αναδιάταξη σε περίπτωση αποτυχίας είναι δυνατή.

3) Σημασιολογία και συνέπεια της υλοποίησης

ΣημασιολογίαΚάφκαΠυρήνας NATSNATS JetStream
Το πολύ μία φοράσπάνιες (συνήθως περιττές)εξ ορισμού (δεν υπάρχουν επιβεβαιώσεις)Can I
Τουλάχιστον μία φοράΠρότυπο (μετατόπιση μετά την επεξεργασία)με πολιτική ackπρότυπο (ack policy, redelivery)
Ακριβώς μία φορά (αποτελεσματική)idempotent production + συναλλαγές· idempotent νεροχύτεςn/aεπιτυγχάνεται σε επίπεδο καταναλωτή (ταυτότητα), ο μεσίτης δεν πραγματοποιεί συναλλαγές όπως στην Kafka

Idempotence και dedup είναι η ευθύνη της εφαρμογής/μώλωπας, ακόμη και όταν «ακριβώς μία φορά» στην Κάφκα.

4) Εντολή, κατάτμηση και κλειδιά

Κάφκα

Η επιλογή του πλήκτρου μηνυμάτων καθορίζει την ισχυρή τοπική τάξη → μέρους.
: 'σύνολο _ i ,' ενοικιαστής _ i , 'order _ i . Αποφύγετε τα καυτά κλειδιά.
Ισορροπία: N μέρη ≈ ανάγνωση παραλληλισμού επίπεδο.

NATS

Στο Core, η ομάδα αναμονής κάνει το υπόλοιπο.
Το JetStream Stream ανακατεύεται από θέματα. έμφαση στον ευρύ ανεμιστήρα/ανεμιστήρα με χαμηλή καθυστέρηση.

5) Διατήρηση, αναπαραγωγή και συμπίεση

Κάφκα

Διατήρηση: "διατήρηση. ms/bytes '.
Συμπίεση: αποθηκεύει την «τελευταία τιμή ανά κλειδί» (κατάλληλη για στιγμιότυπα/caches/sagas).
Επανάληψη: Κάθε καταναλωτής μπορεί να «γυρίσει» αντισταθμίσεις.

JetStream

Ροές: υποστήριξη αρχείων/υπομνημάτων, πολιτική αποθήκευσης ανά χρόνο/ψηφιολέξεις/αριθμό μηνυμάτων.
Καταναλωτές: έλξη/ώθηση, ανθεκτικό/εφήμερο, φίλτρο ανά υποκείμενο προθέματα.
Αναπαραγωγή: αναπαραγωγή ή ανάγνωση από την αρχή/όφσετ (ακολουθία).

6) Συναλλαγές, outbox και συνέπεια

Κάφκα

Idempotent Production ('enable. idempotence = true '): προστασία από τα αντίγραφα.
Συναλλαγές: ατομική καταγραφή διαφόρων παρτίδων + δέσμευση αντισταθμίσεων καταναλωτή → μοτίβο ανάγνωσης-διεργασίας χωρίς «τρύπες».
Transactional Outbox: ένα αρχείο ενός επιχειρηματικού γεγονότος και μια γραμμή outbox σε μια συναλλαγή βάσης δεδομένων, ο εργαζόμενος δημοσιεύει στην Κάφκα.

NATS

Δεν υπάρχουν συναλλαγές «cross-stream» όπως στην Kafka. χρήση outbox/inbox και idempotent καταναλωτές (κλειδιά, deadstore).

7) RPC και απάντηση αιτήματος

Η Κάφκα είναι άβολη για την RPC (τα υψηλά έξοδα, η τάξη/οι απαντήσεις είναι πιο δύσκολες). Χρήση ασύγχρονων εντολών/γεγονότων.
NATS: ιδανικό για απάντηση σε αίτημα (χιλιοστά του δευτερολέπτου, συσχέτιση, χρονοδιαγράμματα).

Παράδειγμα (Go, απάντηση αίτησης NATS):
go resp, err:= nc. Request("profile. get", []byte(`{"id":42}`), 200time. Millisecond)

8) Λειτουργία και τοπολογίες

8. 1 Kafka

Δέσμη: μεσίτες + ZooKeeper (πριν τις παλιές εκδόσεις) ή Kraft (νέα μεταδεδομένα).

Αντιγραφή - Ζώνη RF≥3, ISR/Ελεγκτές

Πολυπεριφέρεια: MirrorMaker 2/Cluster Linking περιουσιακά στοιχεία/περιουσιακά στοιχεία με πολιτικές σύγκρουσης.
Χωρητικότητα δίσκου/δικτύου: από 'throughput × κατακράτηση × αντίγραφα'.

8. 2 NATS

Δέσμη: πολλοί κόμβοι, υπερ-δέσμη (γεω-διανομή), κόμβοι φυλλαδίων για περιφερειακά/άκρα.
JetStream: τοποθέτηση ρευμάτων από σύνολα κόμβων (τοποθέτηση), αναπαραγωγή (R = 1. 5).
WAN: προβλέψιμη χαμηλή καθυστέρηση, εύκολη ομοσπονδία.

9) Ασφάλεια

Κάφκα

TLS (mTLS), SASL: SCRAM, OAuthBearer.
ACL για θέματα/ομάδες/συναλλαγές.
Κρυπτογράφηση «σε ηρεμία» (OS/δίσκοι) + πολιτικές δικτύου.

NATS

nkey/JWT ταυτότητες, λογαριασμοί φορέων εκμετάλλευσης, ανά υποκείμενο ACL.
mTLS μεταξύ κόμβων και πελατών.
Απομόνωση ενοικιαστών (λογαριασμοί) + όρια.

10) Παρατηρησιμότητα και μετρήσεις επιδόσεων

Κάφκα

: "BytesIn/Ou ," ReviewQueue "," UnderRepl χωρισμάτων ", στατιστικά GC/FS.
Θέμα/μέρος: «logEndOffset», υστέρηση καταναλωτή (κρίσιμη).
Παραγωγός/καταναλωτής: retrai, 'batch. μέγεθος ',' linger. κα ',' φέρε. min. bytes ', σφάλματα.
Εργαλεία: JMX, Cruise Control (re-balance), Schema Registry.

NATS/JetStream

Εξυπηρετητής: conn/msgs/sec, RTT, CPU/mem, αργή ανίχνευση καταναλωτή.
JetStream: ανά ρεύμα/καταναλωτή - lag, redeliveries, acks, storage bytes.
Παρακολούθηση: ενσωματωμένο τελικό σημείο, nsc/adm- CLI, ταμπλέτες.

11) Επιδόσεις και ρύθμιση

Κάφκα

Μεγάλα butches και 'linger. m improve throughput and compress p99.
Η συμπίεση (lz4/zstd) αποθηκεύει δίκτυο/δίσκο.
αριθμητικά χωρίσματα ανά αριθμό καταναλωτών/πυρήνων, αλλά όχι από πάνω.
Drives: Το NVMe προτιμούσε, XFS/EXT4 με το «noatime».

NATS

Μικρά μηνύματα, πολλές συνδέσεις είναι ο κανόνας. διατηρεί τις ομάδες αναμονής «ευρεία».
JetStream: tune 'max _ ack _ εν αναμονή', τράβηγμα εναντίον ώθησης, μέγεθος παρτίδων.
Backpressure: 'FlowControl', 'IdleHeartbeat', όρια πλευράς εξυπηρετητή.

12) Πρότυπα ολοκλήρωσης

Outbox/Inbox (τόσο στην Κάφκα όσο και στο NATS).
SAGA: ενορχήστρωση εκδηλώσεων· παππούς του «saga _ id + step».
Λήψη δεδομένων αλλαγής (CDC): Debezium → Kafka; στο NATS - το πρότυπο «εκδότης από ενεργοποιήσεις βάσεων δεδομένων/αρχεία καταγραφής».
Επεξεργασία ρεύματος: Kafka Streams/Flink/Spark. στο NATS - τρίτοι επεξεργαστές/χαρακτηριστικά, καταναλωτές της JetStream.
Dead Letter Queue (DLQ) και πολιτικές επαναπροσδιορισμού (εκθετική backoff + jitter).

13) Παραδείγματα διαμόρφωσης

13. 1 Κάφκα: Δημιουργώντας ένα θέμα και παραγωγός

bash kafka-topics. sh --create --topic orders \
--partitions 12 --replication-factor 3 \
--config cleanup. policy=delete \
--config retention. ms=604800000 # 7d
properties producer. properties bootstrap. servers=broker:9092 acks=all enable. idempotence=true batch. size=65536 linger. ms=10 compression. type=zstd

13. 2 Kafka Streams: idempotent machining (σκίτσο)

java builder. <String, Order>stream("orders")
.groupByKey()
.aggregate(/... /)
.toStream()
.to("orders-agg");

13. 3 NATS JetStream: ροή + καταναλωτής (nats CLI)

bash nats stream add ORDERS --subjects "orders. " --retention limits \
--storage file --max-bytes 100GB --replicas 3 --discard old

nats consumer add ORDERS ORDERS-WORKERS --filter "orders. created" \
--deliver pull --ack explicit --max-deliver 6 --backoff "1s,5s,30s,2m"

13. 4 Αίτηση-απάντηση NATS (Go)

go nc, _:= nats. Connect("tls://nats:4222", nats. Secure(tlsConf))
sub, _:= nc. QueueSubscribe("calc. sum", "workers", func(m nats. Msg) {
//... process...
m. Respond([]byte("42"))
})

14) Kafka vs NATS pick: Ένας γρήγορος οδηγός

Χρειαζόμαστε επανάληψη, μακροπρόθεσμη διατήρηση, συμπίεση, διεργασίες βαρέων ρευμάτων → Κάφκα.
Χρειάζονται γρήγορο RPC, ανεμιστήρα/ανεμιστήρα με μικροκαταστροφή, απλή λειτουργία, άκρη/IoT → NATS (πυρήνας).
Χρειαζόμαστε επιμονή + fan-out, αλλά χωρίς τη βαριά πλατφόρμα «log» → NATS JetStream.
Αυστηρή εντολή κλειδιού και συναλλαγής → Kafka.

15) Σχεδιασμός χωρητικότητας (απλουστευμένη)

Κάφκα

1. Διακίνηση: 'εισερχόμενα _ MBps × RF × retention_days × 86400' → δίσκους.
2. Παρτίδες: 'target _ concurrency' × stock 1. 5-2 ×.
3. Δίκτυο: p99 + αντιγραφή + συμπίεση παραγωγού.

NATS/JetStream

1. Μηνύματα/δευτερόλεπτα και μέση απόδοση →.
2. Κατακράτηση × αντίγραφα → αποθήκευση.
3. Όρια για τους καταναλωτές (εκκρεμείς, ανακατανομές), ΚΜΕ για τη σειρά.

16) Ασφαλής λειτουργία: κατάλογος σημείων ελέγχου

  • Ενεργοποιημένα TLS/mTLS, εναλλάσσονται μυστικά.
  • ACL/λογαριασμοί/ποσοστώσεις (ανά ενοικιαστή).
  • Ευεξία για τους καταναλωτές, DLQ, και jitter υποχωρήσεις.
  • Παρακολούθηση υστέρησης/απόδοσης/σφάλματος· ειδοποιήσεις για URP (Κάφκα), αναδημοσιευμένη καταιγίδα (NATS).
  • Ταμπλό χωρητικότητας: χωρίσματα, αποθήκευση, p99.
  • Δοκιμές αστοχίας κόμβου/ζώνης, ημέρες παιχνιδιού, αναπαραγωγή/backfill.
  • Τα πλήκτρα Schema Registry/JSON Schema είναι τεκμηριωμένα.
  • Οι πολιτικές διατήρησης/συμπίεσης/TTL ευθυγραμμίζονται με τη συμμόρφωση.
  • Οι εκδόσεις μεσιτών/πελατών επικαιροποιούνται τακτικά. επαληθευμένη συμβατότητα πρωτοκόλλου σύρματος.

17) Αντι-μοτίβα

Καυτό κλειδί (όλα τα συμβάντα της ίδιας ταυτότητας) → ένα ρεύμα «ζέσεως». Shardy/ρυθμιστικό διάλυμα.
Υποχωρεί χωρίς ευεξία → διπλά αποτελέσματα.
Τεράστια μηνύματα (MB-tens) → κατακερματισμός/παύση GC. Αποθήκευση ωφέλιμου φορτίου στο αντικείμενο, αποστολή συνδέσμων.
Η ανάμειξη RPC και streaming στην Κάφκα → πολύπλοκο κύκλο/τάξη ζωής.
JetStream ως «μακροχρόνια DWH» → εκτός σήματος· αποθηκεύουν για μεγάλο χρονικό διάστημα σε κλίνες αντικειμένου/στήλης.
Κανένα DLQ → «δηλητηριώδη» μηνύματα δεν περιστρέφεται ατελείωτα.
Ξεχασμένη κατακράτηση → οι δίσκοι είναι γεμάτοι, στάση συστάδων.

18) ΣΥΧΝΈΣ ΕΡΩΤΉΣΕΙΣ

Ε: Μπορώ να κάνω «ακριβώς μία φορά» στο τέλος του αγωγού

A: Στην πράξη - ουσιαστικά ναι: Kafka (ιδιότροπος παραγωγός + συναλλαγές) και idempotent καταβόθρες (κλειδί, upsert). Στο NATS - μέσω idempotence/dedup στην αίτηση.

Ε: Τι να επιλέξετε για ένα εκατομμύριο μικρά RPC/sec

A: Πυρήνας NATS: Μικροεπεξεργασία, απάντηση αιτήματος, φωτεινές συνδέσεις και ομάδες αναμονής.

Ε: Χρειάζεται συμπίεση και στιγμιότυπα της τύχης

Α: Καθαρισμός с Κάφκα. πολιτική = συμπαγής ', κλειδί = σύνολο/πόρος.

Ε: Πώς θα αντιμετωπίσουμε την υστέρηση

Α: Αύξηση του αριθμού των παρτίδων/εργαζομένων, μείωση του χρόνου επεξεργασίας, παρτίδα και προκατασκευή, βελτιστοποίηση της απερήμωσης, κάθετη ενίσχυση των μεσιτών/οδηγών.

Ε: Πολυπεριφέρεια και DR

A: Kafka - MirrorMaker 2/Cluster Linking, στοιχεία ενεργητικού-παθητικού με RPO≈sekundy. NATS - υπερσμήνος/κόμβοι φυλλαδίων· Αντανάκλαση JetStream/αντίγραφα ανά ζώνη.

Σύνολο 19)

Κάφκα και NATS κλείνουν διαφορετικούς τρόπους λειτουργίας: Κάφκα - διαρκή αρχεία καταγραφής γεγονότων, υψηλή απόδοση, συναλλαγή και επανάληψη· Το NATS είναι ένα υπερφωτιστικό λεωφορείο για χαμηλή καθυστέρηση, RPC και απλό ανεμιστήρα, με JetStream για επιμονή. Κάντε την επιλογή σας από σημασιολογία παράδοσης, παραγγελία και διατήρηση, καθυστέρηση και λειτουργικά έξοδα. Κλειδιά/μέρη σχεδιασμού, κατακράτηση, DLQ και παρατηρησιμότητα - και η αρχιτεκτονική γεγονότων σας θα είναι προβλέψιμη, κλιμακωτή και αξιόπιστη.

Contact

Επικοινωνήστε μαζί μας

Επικοινωνήστε για οποιαδήποτε βοήθεια ή πληροφορία.Είμαστε πάντα στη διάθεσή σας.

Telegram
@Gamble_GC
Έναρξη ολοκλήρωσης

Το Email είναι υποχρεωτικό. Telegram ή WhatsApp — προαιρετικά.

Το όνομά σας προαιρετικό
Email προαιρετικό
Θέμα προαιρετικό
Μήνυμα προαιρετικό
Telegram προαιρετικό
@
Αν εισαγάγετε Telegram — θα απαντήσουμε και εκεί.
WhatsApp προαιρετικό
Μορφή: κωδικός χώρας + αριθμός (π.χ. +30XXXXXXXXX).

Πατώντας «Αποστολή» συμφωνείτε με την επεξεργασία δεδομένων.