Pular para o conteúdo

apps/data-patterns/sequential-convoy

094 · Dados & Persistência · ≈ 5 min de estudo

Sequential Convoy

Consumidores em paralelo escalam o throughput e destroem a ordem global. O Sequential Convoy mantém a ordem só onde ela importa: todas as mensagens da mesma entidade seguem juntas, em comboio, pela mesma partição, e o Kafka garante ordem dentro da partição. Entidades diferentes continuam em paralelo.

passos
6
arquivos
7
testes
2
tecnologias
4
Infraestrutura realTypeScriptBunKafkaDocker
Baixar cartão

Cenário

Banco digital publica créditos e débitos de milhares de contas. O crédito de R$ 1.000,00 precisa ser processado antes do débito de R$ 700,00 que ele cobre — em outra ordem, o débito cai numa conta vazia. Contas diferentes não dependem umas das outras e podem ser processadas ao mesmo tempo.

Planta

Fluxo
6/6
bank.account-events - 3 partiçõesProdutor idempotente,uma requisição em voopartição 0: CC-C 1, 2, 3, 4partição 1: CC-A 1, 2,3, 4 e CC-B 1, 2, 3, 4partição 2worker da partição 0worker da partição 1Ledger: aplica a próximasequência, ignorarepetida, recusa lacunachave = accountIdchave = accountId
6

6 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Ordem por grupo, grupos em paralelo.

Esconde cada passo: lembre antes de tocar para revelar.

Vocabulário compartilhado

  1. 01

    O produtor publica com a conta como chave: mesma chave, mesma partição, sempre

  2. 02

    O produtor é idempotente com uma requisição em voo: um lote reenviado nunca ultrapassa o que vinha atrás

  3. 03

    O consumidor processa as partições em paralelo (partitionsConsumedConcurrently) e, dentro de cada uma, uma mensagem por vez

  4. 04

    O ledger aplica só a próxima sequência da conta: repetida é reentrega e é ignorada; lacuna seria mensagem fora de ordem

  5. 05

    Commit manual do offset + 1, somado como BigInt

  6. 06

    Sem chave, a mesma conta se espalha pelas partições e a ordem deixa de ser garantida

Trade-offs

O que se ganha, o que se paga

3 vantagenscada ganho tem um preço3 custos

Vantagens

  • Ordem por entidade sem lock global

  • Contas diferentes em paralelo

  • Nenhum estado extra no broker

Custos

  • Paralelismo limitado ao número de partições

  • Conta muito ativa vira hot partition

  • Aumentar partições depois remapeia as chaves

apps/data-patterns/sequential-convoy

7 arquivos

./

  • docker.shinfraKafka em modo KRaft, sem criação automática de tópico

src/

  • topic_account.tsTópico, produtor idempotente e publicação com ou sem chave
  • consumer_ledger.tsConsumo paralelo por partição e projeção idempotente do ledger
  • config_convoy.tsVariáveis de ambiente validadas no boot
  • demo.tsdemoTrês contas intercaladas e o erro de publicar sem chave
  • consumer_ledger.test.tstesteRepetida, lacuna e saldo sem broker
  • topic_account.test.tstesteOrdem por conta, afinidade de chave e espalhamento sem chave contra Kafka real

Executar · com Docker

  1. ./docker.sh up# sobe Kafka
  2. bun install# dependências
  3. bun run demo# roda o cenário
  4. bun run test# integração contra o serviço real
Requisitos
BunDocker
Sobe junto
Kafka

Por que se relacionam

Teste rápido

Qual destes combina com Sequential Convoy?

Próximo projeto · Dados & PersistênciaClaim Check
Esc

↑ ↓ navegarEnter abrir191 resultados