GH GambleHub

Corretores de mensagens

1) Por que corretores de mensagens

O corretor desenrola os produtores e consórcios em tempo/velocidade/confiabilidade:
  • Tampar e suavizar picos, backpreser.
  • Zoom de leitura/escrita independente.
  • Observabilidade e reprodução de eventos (replay).
  • Pattern arquitetônicos: event-driven, CQRS, event surcing, outbox/inbox.

2) Modelos e termos básicos

2. 1 Kafka (modelo de limpeza)

O topic de partituras (logs ordenados) ofsets nos consórcios.
Consumer Group: paralelismo da leitura, equilíbrio das partições.
Retensschn em tempo/volume; Compactação por chave.
Semântica: O mínimo é at-least-once, e as configurações são effectively exactly-once (produtores idumpotentes + transações).
A ordem é garantida dentro da partição.

2. 2 NATS (tópicos/subjects, baixo atraso)

Subject com hierarquia e wildcarts ('foo', 'foo. >`).
Modos: pub/sub, queue-groups (fã-out com distribuição de trabalho), request-reply (RPC rápido).
Core NATS - Latidão efêmera, super baixa; JetStream - persistência/retensas/repetições.
Ordem: melhor esforço, sem uma garantia global forte; com JetStream - arrumação em striptease, mas pode haver raras reordenações em casos de falha.

3) Semânticos de entrega e coerência

SemânticaKafkaNATS CoreNATS JetStream
At-most-onceraro (normalmente não necessário)padrão (sem confirmação)é possível
At-least-oncepadrão (commit offset após o processamento)com política de ackpadrão (ack policy, redelivery)
Exactly-once (eficaz)produtor idêntico + transação; idempotent sinksn/dalcançado ao nível do consumidor (idempotidade), o corretor não dá transações como em Kafka

Idempotidade e dedupo - responsabilidade da aplicação/sinca, mesmo com «exactly-once» em Kafka.

4) Ordem, partilha e chaves

Kafka

A escolha da chave de mensagem define a partitura → a ordem local forte.
Ключи: `aggregate_id`, `tenant_id`, `order_id`. Evite as chaves quentes.
Equilíbrio: N das partições ≈ nível de paralelismo da leitura.

NATS

Na Core, o balanço é feito por queue-group.
Em JetStream, Stream é xardingado por subjects; foco no fã-out amplo/fã-in com pouco atraso.

5) Retensem, réplicas e compactação

Kafka

Retention: `retention. ms/bytes`.
Compaction: armazena «último valor por chave» (adequado para snapshots/cajas/sagas).
Replay: Qualquer consumer pode «limpar» os ofsets.

JetStream

Streams: arquivos/memori backend, política de armazenamento de horas/bytes/mensagens.
Consumers: pull/push, durable/ephemeral, filtro por prefixo subject.
Replay: redelivery ou leitura desde o início/offset-like (sequence).

6) Transações, outbox e coerência

Kafka

Idempotent Producer (`enable. idempotence = true '): proteção contra suplementos.
Transações: gravação atômica de várias partições + comit consumer-offsets → pattern read-processo-write sem «buracos».
Transactional Outbox: Gravando um evento de negócios e uma linha outbox em uma transação BD, o worker publica no Kafka.

NATS

Não há transações «mage strim» como na Kafka; use outbox/inbox e consoadores idumpotentes (chaves, deadup stor).

7) RPC e pedido-resposta

Kafka para RPC é desconfortável (alta overhead, ordem/respostas mais difícil). Use os comandos/eventos asinhrônicos.
NATS: ideal para request-reply (milisecundos, corelação, temporizadores).

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

8) Exploração e topologia

8. 1 Kafka

Cluster: corretores + ZooKeeper (até versões antigas) ou Kraft (metadato novo).
Replicação: RF≥3 por zona, ISR/controladores.
Multiregião: MirrorMaker 2/Cluster Linking; ativo-passivo/ativo-ativo com políticas de conflito.
Capacidade de disco/rede: contar de 'throughput x retence x replicas'.

8. 2 NATS

Cluster: muitos nós, super-cluster (distribuição geográfica), leafnodes para periferia/edge.
JetStream: posicionamento de striptease por conjunto de nós (place), replicação (R = 1.. 5).
WAN: atrasos previsivelmente baixos, federação fácil.

9) Segurança

Kafka

TLS (mTLS), SASL: SCRAM, OAuthBearer.
LCA em topics/grupos/transações.
Criptografia em paz (OS/discos) + políticas de rede.

NATS

nkey/JWT identidade, operadora-conta, per-subject ACL.
Entre os nódulos e os clientes.
Isolar aluguéis (accounts) + limites.

10) Observabilidade e métricas operacionais

Kafka

Брокер: `BytesIn/Out`, `RequestQueue`, `UnderReplicatedPartitions`, GC/FS stats.
Topic/partição: «logEndOffset», consumer lag (crítico).
Produtor/consumer: retraí, 'batch. size`, `linger. ms`, `fetch. min. bytes ', erros.
Ferramentas: JMX, Cruise Controle (re-balanço), Schema Registry.

NATS/JetStream

Servidor: conn/msgs/sec, RPT, CPU/mem, slow consumer detecção.
JetStream: per stream/consumer — lag, redeliveries, acks, storage bytes.
Monitoramento: endpoint integrado, nsc/adm-CLI, dashboards.

11) Desempenho e sintonização

Kafka

Batches grandes e 'linger. ms 'melhoram o throughput e comprimem o p99.
Compressão (lz4/zstd) economiza rede/disco.
num. partition pelo número de consumidores/núcleos, mas não superaquecer (overhead).
Disco: NVMe preferido, XFF/EXT4 com 'noatime'.

NATS

Mensagens menores, muitas conexões - normal; mantenha a queue groups «amplos».
JetStream: tune `max_ack_pending`, pull vs push, size of batches.
Backpressure: `FlowControl`, `IdleHeartbeat`, server-side limits.

12) Patrões de integração

Outbox/Inbox (tanto no Kafka como no NATS).
SAGA: Orquestra eventos; dedupo por 'saga _ id + step'.
Change Data Capture (CDC): Debezium → Kafka; no NATS - pattern «publisher de triggers/logs BD».
Stream processing: Kafka Streams/Flink/Spark; no NATS - processadores de terceiros/funções, JetStream consumers.
Dead Etter Queue (DLQ) e Retry Policy (backoff exponencial + jitter).

13) Exemplos de configuração

13. 1 Kafka: criação de top e produtor

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: processamento idumpotente (esboço)

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) Seleção Kafka vs NATS: referência rápida

Precisamos de réplicas, retenções longas, compactação, processos de estrim pesados → Kafka.
Precisa de RPC rápido, fã-out/fã-in com microlaturo, simples operação, edge/IoT → NATS (Core).
É preciso persistência + fã-out, mas sem a pesada plataforma de "limpeza" NATS ".
Ordem rigorosa por chave e transação → Kafka.

15) Planejamento de capacidade (simplificado)

Kafka

1. Saída de banda: 'inbound _ MBps x RF x retence _ days x 86400' → disco.
2. Partições: 'target _ concurrency' x reserva 1. 5–2×.
3. Rede: p99 + replicação + produtora de compressão.

NATS/JetStream

1. Mensagens/segundos e tamanho médio de → throughput.
2. Retention×replicas → storage.
3. Limites de consumers (ack-pending, redeliveries), CPU para seriado.

16) Operação segura: folha de cheque

  • O TLS/mTLS está incluído, os segredos são rotativos.
  • LCA/contas/quotas (per-tenant).
  • Idempotidade em consumers, DLQ e retrai com jitter.
  • Monitoramento de lag/throughput/erros; alertas em URP (Kafka), tempestade redelivery (NATS).
  • Capacity dashboards: partituras, armazenamento, p99.
  • Testes de falha de nódulos/zonas, game-days, replay/backphill.
  • As chaves de partilha e de circuito (Schema Registry/JSON Schema) estão documentadas.
  • As políticas de retencagem/compactação/TTL estão alinhadas com a complicação.
  • As versões de corretores/clientes são atualizadas regularmente; a compatibilidade do protocolo wire foi verificada.

17) Anti-pattern

Chave quente (todos os eventos de um único ID) → um fluxo de fervura. Chardin/Tampar.
Retraias sem idempotidade → efeitos de captura.
Mensagens enormes (MB-10) → fragmentação/pausas GC. Guarde o payload no objeto, envie links.
Misturar RPC e streaming em Kafka → um complexo ciclo de vida/ordem.
JetStream como «DWH de longo prazo» → fora de propósito; guardem durante muito tempo em estoques de objetos/invertebrados.
Não há DLQ → mensagens «venenosas» rodam indefinidamente.
Os discos de retenha esquecidos estão cheios, param o cluster.

18) FAQ

Q: Você pode fazer «exactly-once» no final do pipline?
A: Na prática, efetivamente sim: Kafka (produtor Idumpotent + Transacção) e Sinca Idumpotente (chave, upsert). No NATS - através da idempotação/dedupo no aplicativo.

Q: O que escolher para um milhão de RPC menores/segundos?
A: NATS Core: microlatabilidade, request-reply, conectórios leves e queue-groups.

Precisamos de compactação e de um estado?
A: Kafka с `cleanup. policy = compact ', chave = unidade/recurso.

Como lutar contra a laje?
A: Aumentar o número de partituras/worker, reduzir o tempo de processamento, batches e prefetch, otimizar a deserialização, reforçar verticalmente corretores/discos.

Q: Multiregião e DR?
A: Kafka - MirrorMaker 2/Cluster Linking, ativo passivo com RPO≈sekundy. NATS — supercluster/leafnodes; Espelhos/réplicas por zona.

19) Resultados

Kafka e NATS fecham diferentes modos: Kafka - registros duráveis de eventos, throughput alto, transacionalidade e réplicas; O NATS é um pneu ultraleve para atrasos baixos, RPC e um fã-out simples, com JetStream para a persuasão. Escolha a partir da semântica de entrega, ordem e retenção, latência e custos operacionais. Projete chaves/partituras, retensas, DLQ e observabilidade - e sua arquitetura de eventos será previsível, escalável e confiável.

Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Telegram
@Gamble_GC
Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.