GH GambleHub

Broker di messaggi

1) Perché i broker di messaggi

Il broker esegue i produttori e i consumatori in termini di tempo/velocità/affidabilità:
  • Buffer e antialiasing dei picchi, backprescher.
  • Scalare la lettura/scrittura in modo indipendente.
  • Osservabilità e riproduzione (replay) degli eventi.
  • Pattern architettonici: event-driven, CQRS, event source, outbox/inbox.

2) Modelli e termini di base

2. 1 Kafka (modello di tubo)

Il topic della partitella (loghi ordinati) è stato usato dai consumatori.
Consumer Group - parallelismo di lettura, bilanciamento delle partiture.
Ritensh in termini di tempo/volume; Compattazione a chiave.
Semantica: minimo: at-least-once, mentre le impostazioni sono effectively exactly-once (produttore Idempotent + Transazione).
L'ordine è garantito all'interno della partitura.

2. 2 NATS (temi/subjetts, ritardo basso)

Subject con gerarchia e cartelle ('foo', 'foo'. >`).
Modalità: pub/sub, queue-groups (fan-out con distribuzione del lavoro), richiest-reply (RPC veloce).
Core NATS è una latitanza effimera e ultra bassa; JetStream - persistenza/ritensh/ripetizioni.
Ordine: migliore-sforzo, senza una forte garanzia globale; Con il JetStream, l'ordinamento sullo strike, ma è possibile riordinare raramente i guasti.

3) Semantici di consegna e coerenza

SemanticaKafkaNATS CoreNATS JetStream
At-most-onceraro (di solito non necessario)impostazione predefinita (nessuna conferma)è possibile
At-least-oncestandard (commit offset dopo l'elaborazione)con criteri ackstandard (ack policy, redelivery)
Exactly-once (efficiente)produttore idoneo + transazioni; idempotent sinksn/draggiunto a livello di consumatore (idempotenza), il broker non dà transazioni come in Kafka

Idampotenza e deadup sono responsabilità dell'applicazione/sink, anche con «exactly-once» in Kafka.

4) Ordine, partizionamento e chiavi

Kafka

La selezione della chiave del messaggio determina l'ordine locale forte della partitura.
Ключи: `aggregate_id`, `tenant_id`, `order_id`. Evitate le chiavi calde.
Il numero N delle partizioni è il livello di parallelismo della lettura.

NATS

In Core, il saldo fa queue-group.
Nel JetStream Stream è un subjetts; Concentrarsi sull'ampio fan-out/fan-in con poco ritardo.

5) Ritocco, repliche e compattazione

Kafka

Retention: `retention. ms/bytes`.
Compattion: memorizza «ultimo valore per chiave» (adatto per snapshot/caschi/saghe).
Replay: qualsiasi consumatore può «cancellare» gli offset.

JetStream

Streams: file/memorie backend, regole di conservazione tempo/byte/messaggi.
Consumers: pull/push, durable/ephemeral, filtro per i prefissi subject.
Replay: redelivery o lettura dall'inizio/offset-like (sequence).

6) Transazioni, outbox e coerenza

Kafka

Idempotent Producer (`enable. idempotence = true ') - Protezione dalle prese.
Trasmissione - Registrazione atomatica di più partizioni + commit consumer-offsets di pattern read-process-write senza «buchi».
Transactional Outbox: registra eventi aziendali e righe outbox in una singola transazione database, il worker pubblica su Kafka.

NATS

Nessuna transazione MJ come Kafka; utilizzare outbox/inbox e le consolle idipotenti (chiavi, dedop store).

7) RPC e richiesta-risposta

Kafka per RPC è scomodo (overhead alto, ordine/risposte più difficile). Usa i comandi asincroni/eventi.
NATS è ideale per richiest-reply (millisecondi, corellazione, timeout).

Esempio (Go, NATS sollest-reply):
go resp, err:= nc. Request("profile. get", []byte(`{"id":42}`), 200time. Millisecond)

8) Utilizzo e topologia

8. 1 Kafka

Cluster: broker + ZooKeeper (prima delle versioni precedenti) o KRAFt (nuovo metadato).
Replica: RF≥3 per area, ISR/controller.
Multiregion 2/Cluster Linking; attivo-passivo/attivo-attivo con politiche di conflitto.
Capacità disco/rete - Conteggia da «throughput x retention x replica».

8. 2 NATS

Cluster: molti nodi, super-cluster (georasportazione), leafnodes per periferica/edge.
JetStream - Posizionamento degli strip per set di nodi, replica (R = 1.. 5).
WAN: ritardi prevedibilmente bassi, federazione leggera.

9) Sicurezza

Kafka

TLS (mTLS), SASL: SCRAM, OAuthBearer.
ACL su top/gruppi/transazioni.
Crittografia a riposo (OS/dischi) + criteri di rete.

NATS

nkey/JWT identità, account operatore, per-subject ACL.
mTLS tra i nodi e i clienti.
Isolamento inquilini (accounts) + limiti.

10) Osservabilità e metriche operative

Kafka

Брокер: `BytesIn/Out`, `RequestQueue`, `UnderReplicatedPartitions`, GC/FS stats.
Topic/partition: «logEndOffset», consumer lag (critico).
Produttore/consumatore: retrai, 'batch. size`, `linger. ms`, `fetch. min. bytes', errori.
Strumenti: JMX, Cruise Control (re-bilanciamento), Schema Registry.

NATS/JetStream

Server: conn/msgs/sec, RTT, CPU/mem, rilevazione slow consumer.
JetStream: per stream/consumer — lag, redeliveries, acks, storage bytes.
Monitoraggio: endpoint integrato, nsc/adm-CLI, dashboard.

11) Prestazioni e tuning

Kafka

Grandi battelli e «linger». ms'migliorano throughput e comprimono p99.
La compressione (lz4/zstd) risparmia rete/disco.
num. partition per numero di consumatori/core, ma non sovraccarico (overhead).
Unità NVMe preferite, XFS/EXT4 con'noatime '.

NATS

Messaggi piccoli, molte connessioni - normalità; tenete le queue groups'ampie ".
JetStream: tune `max_ack_pending`, pull vs push, size of batches.
Backpressure: `FlowControl`, `IdleHeartbeat`, server-side limits.

12) Modelli di integrazione

Outbox/Inbox (sia Kafka che NATS).
SAGA - orchestrazione eventi; Dedotto dì saga _ id + step ".
Change Data Capture (CDC): Debezium → Kafka; in NATS è il pattern «publisher da trigger o trigger di database».
Stream processing: Kafka Streams/Flink/Spark; in NATS: processori/funzioni di terze parti, consumers di terze parti.
Dead Letter Queue (DLQ) e retry (backoff esponenziale + jitter).

13) Esempi di configurazione

13. 1 Kafka: creazione di topic e produttore

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 - Idempotente (sketch)

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

13. 3 NATS JetStream: stream + consumer (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 Request-Reply (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) Selezione di Kafka vs NATS: punto di riferimento rapido

Abbiamo bisogno di repliche, retensioni lunghe, compattazioni, processi strim pesanti di Kafka.
Abbiamo bisogno di RPC rapido, fan-out/fan-in con microlattività, facile da usare, NATS (Core).
C'è bisogno di Persistenza + Fan-Out, ma senza la pesante piattaforma «tana» della NATS.
Ordine rigoroso per la chiave e la transazione di Kafka.

15) Pianificazione della capacità (semplificata)

Kafka

1. Larghezza di banda: 'inbound _ MBps x RF x retention _ days x 86400' unità.
2. Partizioni: «target _ concertency» x riserva 1. 5–2×.
3. Rete: p99 + replica + produttore compressione.

NATS/JetStream

1. Messaggi/secondi e dimensioni medie di throughput.
2. Retention×replicas → storage.
3. Limiti consumers (ack-pending, redeliverie), CPU per la serializzazione.

16) Utilizzo sicuro: foglio di assegno

  • Il TLS/mTLS è acceso, i segreti vengono rotati.
  • ACL/account/quote (per-tenant).
  • Idampotenza su concimatori, DLQ e retrai con jitter.
  • Monitoraggio di lag/throughput/errori; alert su URP (Kafka), ridelivery-tempesta (NATS).
  • Capacity dashboards: partition, storage, p99.
  • Test di guasto nodi/zone, game-days, repliche/backfill.
  • Sono documentate le chiavi di partizionamento e schema (Schema Registry/JSON Schema).
  • I criteri retensico/compattazione/TTL sono coerenti con la compilazione.
  • Le versioni di broker/client vengono aggiornate regolarmente; La compatibilità del protocollo wire è stata verificata.

17) Anti-pattern

Chiave hot (tutti gli eventi di un ID) → un flusso bollente. Sharding/buffer.
I retrai non sono idepotenti ad avere effetti di ripresa.
Messaggi enormi (MB-10) frammentazione/pausa GC. Memorizzare payload nell'oggetto, inviare collegamenti.
Miscelare RPC e streaming in Kafka è un ciclo di vita/ordine complesso.
come «DWH a lungo termine» non è il suo scopo; Conserva a lungo negli store di oggetti/colinvertebrati.
Nessun DLQ, nessun messaggio velenoso.
I dischi di → dimenticati sono pieni, fermate il cluster.

18) FAQ

Q: È possibile fare un'exactly-once "alla fine del pipline?
A: In pratica, efficacemente sì: Kafka (produttore idipotente + transazioni) e sink idipotenti (chiave, upsert). In NATS - attraverso Idempotence/Dedup nell'applicazione.

Q: Cosa scegliere per un milione di RPC piccoli/secondi?
A: NATS Core: microlattività, richiest-reply, connettori leggeri e queue-groups.

Hai bisogno di compattazione e snapshot?
A: Kafka с `cleanup. policy = compact ', chiave = aggregazione/risorsa.

Come si combatte il campo?
A: Aumentare il numero di partenze/worker, ridurre i tempi di lavorazione, batch e prefetch, ottimizzare la deserializzazione, rinforzare verticalmente i broker/unità.

Q: Multiregione e DR?
A: Kafka - 2/Cluster Linking, attivo passivo con . NATS — supercluster/leafnodes; JetStream mirroring/repliche per zona.

19) Riepilogo

Kafka e NATS chiudono diverse modalità: Kafka - registri eventi duraturi, throughput alto, transazioni e repliche; NATS è un pneumatico ultraleggero per ritardi bassi, RPC e semplice fan-out, con JetStream per la persistenza. Scegliere la semantica di spedizione, l'ordine e la retensione, la latitudine e i costi operativi. Progettate chiavi/partiture, retensioni, DLQ e osservabilità e l'architettura di eventi sarà prevedibile, scalabile e affidabile.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Telegram
@Gamble_GC
Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.