GH GambleHub

Brokerii de mesaje

1) De ce brokerii de mesaje

Brokerul dezleagă producătorii și consumatorii de timp/viteză/fiabilitate:
  • Vârf tamponare și netezire, backprescher.
  • Citiți/scrieți scalarea în mod independent.
  • Observabilitatea și reluarea evenimentelor.
  • Modele arhitecturale: event-driven, CQRS, event sourcing, outbox/inbox.

2) Modele și termeni de bază

2. 1 Kafka (model jurnal)

Subiect → părți (busteni comandate) → compensează de la consumatori.
Consumer Group: Citiți paralelismul, echilibrarea partidului.
Reținerea în funcție de timp/volum; compactare cheie.
Semantică: minim - cel puțin o dată, cu setări - efectiv exact o dată (producători idempotenți + tranzacții).
Ordin: Garantat în cadrul partidului.

2. 2 NATS (subiecți, latență scăzută)

Subiect (temă) cu ierarhie și wildcards ('foo. ',' foo. >`).
Moduri: pub/sub, grupuri de coadă (fan-out cu distribuție de lucru), cerere-răspuns (RPC rapid).
Nucleul NATS - latență efemeră, ultra-scăzută; JetStream - persistenta/retentie/repetitii.
Ordine: cel mai bun efort, nici o garanție globală puternică; cu JetStream - comanda pe flux, dar reordonarea rară în caz de eșecuri este posibilă.

3) Semantica de livrare și consistență

SemanticăKafkaNATS CoreNATS JetStream
Cel mult o datărare (de obicei inutile)implicit (fără confirmări)Pot
Cel puțin o datăstandard (comit compensat după prelucrare)cu politica ackstandard (politica ack, redelivery)
Exact o dată (eficient)producător idempotent + tranzacții; chiuvete idempotenten/arealizat la nivelul consumatorilor (idempotență), brokerul nu oferă tranzacții ca în Kafka

Idempotența și dedupul sunt responsabilitatea aplicării/vânătăii, chiar și atunci când „exact o dată” în Kafka.

4) Ordine, partiționare și chei

Kafka

Alegerea cheii mesajului determină partidul → o ordine locală puternică.
Ключи: 'agregate _ id',' tenant _ id', 'order _ id'. Evitați cheile fierbinți.
Balanță: N partide ≈ citirea nivelului paralelismului.

NATS

La Core, grupul de coadă face echilibrul.
JetStream Stream este amestecat de subiecți; accent pe ventilator larg/ventilator în cu latență scăzută.

5) retenție, reluare și compactare

Kafka

Retentie: "retentie. ms/bytes ".
Compactare: stochează „ultima valoare după cheie” (potrivit pentru instantanee/cache/sagas).
Replay: Orice consumator poate „derula înapoi” compensează.

JetStream

Fluxuri: fișier/memo backends, politica de stocare de timp/octeți/numărul de mesaje.
Consumatori: pull/push, durabil/efemer, filtru după prefixele subiectului.
Replay: redelivery sau lectură de la început/offset-like (secvență).

6) Tranzacții, outbox și consecvență

Kafka

Producător Idempotent ("activează. idempotence = true '): protecție împotriva duplicatelor.
Tranzacții: înregistrarea atomică a mai multor loturi + angajarea consumatorilor-compensează → model de citire-proces-scriere fără „găuri”.
Outbox tranzacțional: o înregistrare a unui eveniment de afaceri și o linie outbox într-o singură tranzacție de baze de date, lucrătorul publică în Kafka.

NATS

Nu există tranzacții „cross-stream” ca în Kafka; utilizați outbox/inbox și consumatori idempotenți (chei, deadstore).

7) RPC și cerere-răspuns

Kafka este incomod pentru RPC (deasupra capului, ordinea/răspunsurile sunt mai dificile). Utilizați comenzi/evenimente asincrone.
NATS: ideal pentru cerere-răspuns (milisecunde, corelație, timeout).

Exemplu (Go, NATS cerere-răspuns):
go resp, err:= nc. Request("profile. get", []byte(`{"id":42}`), 200time. Millisecond)

8) Funcționare și topologii

8. 1 Kafka

Cluster: brokeri + ZooKeeper (înainte de versiunile vechi) sau KRaft (metadate noi).

Replicare - Zona RF≥3, ISR/Controlere

Multi-regiune: MirrorMaker 2/Cluster Linking; active-pasiv/activ-activ cu politici de conflict.
Capacitate disc/rețea: citiți din 'throughput × retenție × replici'.

8. 2 NATS

Cluster: multe noduri, super-cluster (geo-distribuție), leafnodes pentru periferice/margine.
JetStream: plasarea fluxurilor de seturi de noduri (plasare), replicarea (R = 1.. 5).
Previzibil latenţă scăzută, federaţie uşoară.

9) Siguranță

Kafka

TLS (mTLS), SASL: SCRAM, OAuthBearer.
ACL pe subiecte/grupuri/tranzacții.
Criptare „în repaus” (OS/discuri) + politici de rețea.

NATS

identități nkey/JWT, conturi de operator, pe subiect ACL.
mTLS între noduri și clienți.
Izolarea chiriașilor (conturi) + limite.

10) Măsurători de observabilitate și performanță

Kafka

Брокер: 'BytesIn/Out', 'RequestQueue', 'UnderReplicatedPartitions', statistici GC/FS.
Subiect/parte: 'logEndOffset', lag de consum (critic).
Producător/consumator: retrai, "lot. size ',' linger. ms', „adu”. min. bytes, erori.
Instrumente: JMX, Cruise Control (re-echilibru), Schema Registry.

NATS/JetStream

Server: conn/msgs/sec, RTT, CPU/mem, detectarea lentă a consumatorilor.
JetStream: pe flux/consumator - lag, redeliveries, acks, bytes de stocare.
Monitorizare: punct final încorporat, nsc/adm-CLI, tablouri de bord.

11) Performanță și tuning

Kafka

Butches mari și "linger. dna "improve debit și comprima p99.
Compresia (lz4/zstd) salvează rețeaua/discul.
num. partiții după numărul de consumatori/nuclee, dar nu deasupra capului.
Unități: NVMe preferat, XFS/EXT4 cu „noatime”.

NATS

Mesajele mici, multe conexiuni sunt norma; păstrați grupuri de coadă „wide”.
JetStream: tune 'max _ ack _ pending', pull vs push, dimensiunea loturilor.
Backpressure: 'FlowControl', 'IdleHeartbeat', limitele serverului.

12) Modele de integrare

Outbox/Inbox (în ambele Kafka și NATS).
SAGA: orchestrarea evenimentelor; bunicul prin 'saga _ id + step'.
Modificarea capturii de date (CDC): Debezium → Kafka; în NATS - modelul „publisher from database triggers/busteni”.
Procesarea fluxurilor: Kafka Streams/Flink/Spark; în NATS - procesoare/caracteristici terțe, consumatori JetStream.
Dead Letter Queue (DLQ) și încercați din nou politici (backoff exponențial + jitter).

13) Exemple de configurare

13. 1 Kafka: a face un subiect și producător

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 Fluxuri Kafka: prelucrare idempotentă (schiță)

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

13. 3 NATS JetStream: stream + consumator (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 Cerere-răspuns (Du-te)

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 alege: Un ghid rapid

Avem nevoie de reluare, retenție pe termen lung, compresie, procese de flux greu → Kafka.
Aveți nevoie de RPC rapid, ventilator/ventilator cu microlatență, operare simplă, edge/IoT → NATS (Core).
Avem nevoie de persistență + fan-out, dar fără platforma grea „log” → NATS JetStream.
Ordin strict de cheie și tranzacție → Kafka.

15) Planificarea capacității (simplificată)

Kafka

1. Throughput: 'inbound _ MBps RF 86400' discuri.
2. Loturi: 'target _ concurrency' × stocul 1. 5-2 ×.
3. Rețea: p99 + replicare + comprimare producător.

NATS/JetStream

1. Mesaje/sec și debit mediu de →.
2. Retenţie × replici → depozitare.
3. Limitele consumatorilor (ack-pending, redeliveries), CPU pentru serializare.

16) Funcționare sigură: listă de verificare

  • TLS/mTLS activat, secretele rotite.
  • ACL/conturi/cote (per chiriaș).
  • Idempotența asupra consumatorilor, DLQ și retragerile jitter.
  • Lag/throughput/error monitoring; alerte pe URP (Kafka), redelivery storm (NATS).
  • Tablouri de bord de capacitate: partiții, stocare, p99.
  • Node/zone failure tests, game-days, reluare/rambursare.
  • Schema Registry/JSON Chei Schema sunt documentate.
  • Politicile de retenție/comprimare/TTL sunt aliniate la conformitate.
  • Versiunile broker/client sunt actualizate în mod regulat; compatibilitatea protocolului de sârmă verificată.

17) Anti-modele

Cheie fierbinte (toate evenimentele de același ID) → un flux „fierbere”. Shardy/tampon.
Se retrage fără idempotenţă → efecte duble.
Mesaje uriașe (MB-zeci) → fragmentare/pauze GC. Stocați sarcina utilă în obiect, trimiteți link-uri.
Amestecarea RPC și streaming în Kafka → un ciclu de viață complex/ordine.
JetStream ca „DWH pe termen lung” → off-label; magazin pentru o lungă perioadă de timp în paturi obiect/coloană.
Niciun DLQ nu → mesaje „otrăvitoare” care se învârt la nesfârşit.
Reținerea uitată → discurilor sunt pline, oprirea clusterului.

18) ÎNTREBĂRI FRECVENTE

Î: Pot face „exact-o dată” la sfârșitul conductei?
R: În practică - efectiv da: Kafka (producător idempotent + tranzacții) și chiuvete idempotente (cheie, upsert). În NATS - prin idempotență/dedup în aplicație.

Î: Ce să alegeți pentru un milion de RPC-uri mici/sec?
R: NATS Core: Microlatență, cerere-răspuns, conexiuni ușoare și grupuri de coadă.

Î: Aveți nevoie de compactare și instantanee de avere?
R: Kafka с "curățare. policy = compact ', key = agregate/resource.

Î: Cum să se ocupe de lag?
R: Creșterea numărului de loturi/lucrători, reducerea timpului de procesare, lot și prefetch, optimizarea deserializării, consolidarea verticală a brokerilor/unităților.

Î: Multi-regiune și DR?
R: Kafka - MirrorMaker 2/Cluster Legarea, răspunderea activelor cu RPO≈sekundy. NATS - supercluster/leafnodes; JetStream oglindire/replici pe zone.

19) Totaluri

Kafka și NATS închid diferite moduri: Kafka - jurnale de evenimente durabile, debit mare, tranzacționalitate și reluare; NATS este un autobuz ultralight pentru latență scăzută, RPC și fan-out simplu, cu JetStream pentru persistență. Alegeți din semantica de livrare, comandă și retenție, latență și costuri de operare. Cheile/petrecerile de design, retenția, DLQ și observabilitatea - iar arhitectura evenimentului va fi previzibilă, scalabilă și fiabilă.

Contact

Contactați-ne

Scrieți-ne pentru orice întrebare sau solicitare de suport.Suntem mereu gata să ajutăm!

Telegram
@Gamble_GC
Pornește integrarea

Email-ul este obligatoriu. Telegram sau WhatsApp sunt opționale.

Numele dumneavoastră opțional
Email opțional
Subiect opțional
Mesaj opțional
Telegram opțional
@
Dacă indicați Telegram — vă vom răspunde și acolo, pe lângă Email.
WhatsApp opțional
Format: cod de țară și număr (de exemplu, +40XXXXXXXXX).

Apăsând butonul, sunteți de acord cu prelucrarea datelor dumneavoastră.