Pular para o conteúdo
fernando.moretes.com
BlogEstudosCursosE-booksOpen SourcePodcasts
Loading…
Fernando Azevedo

Arquiteto de TI Especialista

Arquitetura, AWS, IA em produção, sistemas financeiros e FinOps, escritos a partir do que foi operado, com os números.

  • LinkedIn
  • GitHub
  • E-mail

Conteúdo

  • Blog
  • Estudos de arquitetura
  • Cursos
  • E-books
  • Open Source
  • Podcasts
  • Assuntos
  • Trilhas

Ferramentas

  • Well-Architected self-check
  • Arquitetura deste site
  • Números públicos
  • Histórico de estudo

Sobre

  • Comunidade
  • IA Builder
  • Perfil
  • Currículo (CV)
  • Trabalhe comigo
  • Media kit
  • RSS do blog
  • RSS dos estudos
  • Artigos narrados (podcast)
  • llms.txt
  • Termos, privacidade e uso de IA

(c) 2026 Fernando Francisco Azevedo

Estudos/Decisão (ADR)
RSSMarkdownLLMs
Decisão (ADR)Order processing (cenário)Event-drivenAceito

ADR: EventBridge vs Kafka/MSK para Processamento de Pedidos

25 de jan. de 2026 7 min Com apoio de IA000 visualizações00 reproduções
Ouvir estudo

cerca de 7 min · áudio gerado ao tocar

Escolher o backbone de eventos errado em um sistema de pedidos não é um problema de preferência tecnológica, é um risco de negócio. EventBridge e MSK resolvem problemas parecidos na superfície, mas divergem profundamente em garantias de entrega, throughput, ordenação e custo operacional. Este ADR documenta o raciocínio que levou à decisão e os trade-offs que qualquer arquiteto precisa entender antes de fazer essa escolha.

Ficha do Cenário

Sistema
Plataforma de processamento de pedidos (e-commerce / marketplace)
Domínio
Event-driven architecture
Volume estimado
5.000–50.000 pedidos/hora em operação normal; picos de 10x em datas comemorativas (estimativa)
Consumidores de eventos
Estoque, pagamentos, notificações, fraude, analytics, fulfillment
Requisitos críticos
Ordenação por pedido, replay para reprocessamento, at-least-once delivery, auditoria
Cloud
AWS (região única, multi-AZ)
Stack existente
Lambda, ECS/Fargate, RDS Aurora, S3, CloudWatch
Status da decisão
Aceita

Contexto e Forças em Jogo

O sistema de pedidos é o núcleo operacional da plataforma. Cada transição de estado de um pedido, criado, pago, separado, despachado, entregue, cancelado, precisa ser propagada de forma confiável para múltiplos consumidores downstream. Um erro nessa propagação pode resultar em cobrança dupla, estoque incorreto, falha de notificação ao cliente ou inconsistência no sistema de fraude.

A equipe de engenharia tem experiência sólida com AWS managed services e Lambda, mas não possui histórico operacional com Kafka. O time de plataforma tem dois engenheiros sênior dedicados à infraestrutura. A pressão de negócio é por time-to-market rápido, mas o CTO sinalizou que qualquer incidente de perda de pedido tem custo político alto.

As forças que moldam esta decisão são:

  • Ordenação: pedidos individuais precisam ser processados em sequência. Um evento de order.cancelled não pode ser processado antes de order.paid para o mesmo orderId.
  • Throughput: o volume atual não é extremo, mas os picos de Black Friday e datas sazonais exigem elasticidade real.
  • Replay: a equipe de analytics e o time de fraude precisam reprocessar eventos históricos quando modelos mudam ou bugs são corrigidos.
  • Carga operacional: com um time pequeno, cada hora gasta em tuning de brokers é uma hora a menos em features.
  • Custo: MSK tem custo fixo de infraestrutura independente de uso; EventBridge cobra por evento publicado.
  • Integração com o ecossistema AWS: o stack existente é 100% AWS; integrações nativas reduzem código de cola.

Por Que Esta Decisão É Não-Trivial

A tentação comum é tratar EventBridge como "Kafka gerenciado mais simples". Essa analogia é perigosa. EventBridge é um event router baseado em regras, ele roteia eventos de fontes para destinos com base em padrões de conteúdo. Kafka (e MSK) é um log distribuído de commits: ele armazena eventos de forma durável, ordenada e permite múltiplos consumidores independentes lerem no seu próprio ritmo.

Essas diferenças têm implicações concretas:

Ordenação: EventBridge não garante ordenação entre eventos. Para um sistema de pedidos onde a sequência created → paid → shipped é semanticamente crítica, isso exige que os consumidores implementem lógica de ordenação própria ou que a aplicação tolere eventos fora de ordem. MSK com particionamento por orderId garante ordenação dentro da partição, o que é exatamente o que precisamos.

Replay: EventBridge Archive permite replay de eventos, mas com limitações, o replay é para o mesmo destino e não suporta filtragem granular por consumidor. MSK retém o log por período configurável (dias a semanas) e qualquer consumer group pode reposicionar seu offset para qualquer ponto no tempo, independentemente dos outros. Para o time de analytics que precisa reprocessar 30 dias de eventos sem afetar o consumer de pagamentos, MSK é estruturalmente superior.

Fan-out e acoplamento: EventBridge brilha no fan-out desacoplado, você adiciona uma nova regra e um novo destino sem tocar no produtor. MSK requer que novos consumidores criem seus próprios consumer groups, o que é igualmente desacoplado mas exige mais configuração inicial.

Throughput e latência: EventBridge tem throughput padrão de 10.000 eventos/segundo por região (com soft limits ajustáveis via suporte), latência tipicamente abaixo de 1 segundo mas sem SLA de latência publicado. MSK suporta throughput de centenas de MB/s com latência de milissegundos em configurações adequadas. Para o volume atual do sistema, ambos são suficientes, mas MSK tem headroom muito maior.

O ponto central é: EventBridge é a escolha certa quando o problema é roteamento e integração de serviços; MSK é a escolha certa quando o problema é streaming de dados com ordenação, replay e múltiplos consumidores independentes. Processamento de pedidos é o segundo caso.

Opções Avaliadas

Amazon EventBridge (Event Bus)

Prós
  • Zero overhead operacional, totalmente serverless e gerenciado pela AWS
  • Integração nativa com 200+ serviços AWS e SaaS partners
  • Schema Registry integrado para governança de contratos de eventos
  • Fan-out desacoplado via regras, adicionar consumidor não requer mudança no produtor
  • Custo proporcional ao uso, ideal para volumes baixos e irregulares
Contras
  • Sem garantia de ordenação entre eventos do mesmo pedido
  • Replay via Archive tem limitações: sem filtragem por consumer, replay vai para destino original
  • Retenção máxima de eventos via Archive: indefinida, mas replay tem janela operacional limitada
  • Sem conceito de consumer group, múltiplos consumidores exigem múltiplas regras e targets
  • Throughput default de 10k eventos/s por região (soft limit) pode ser insuficiente em picos extremos

Adequado para integração de serviços e notificações; insuficiente como backbone de pedidos com requisito de ordenação e replay granular

Amazon MSK (Managed Streaming for Apache Kafka)

Prós
  • Ordenação garantida por partição, particionamento por orderId garante sequência de estados
  • Replay nativo e granular, qualquer consumer group reposiciona offset independentemente
  • Throughput de centenas de MB/s, headroom real para crescimento
  • Retenção configurável (dias a semanas), log imutável como fonte de verdade
  • Consumer groups independentes, analytics, fraude, pagamentos leem sem interferência mútua
Contras
  • Custo fixo de infraestrutura independente de uso, brokers cobrados por hora
  • Curva de aprendizado operacional: partições, replication factor, consumer lag, offset management
  • Sem integração nativa direta com Lambda via trigger (requer MSK Event Source Mapping, disponível mas com limitações de throughput)
  • Requer planejamento de partições upfront, reparticionamento posterior é complexo
  • Monitoramento de consumer lag exige instrumentação adicional (CloudWatch MSK metrics)

Escolha correta para o backbone de pedidos, ordenação, replay e múltiplos consumers independentes são requisitos de primeira classe atendidos nativamente

Arquitetura Híbrida: MSK + EventBridge

Prós
  • MSK como backbone de pedidos (ordenação + replay); EventBridge para notificações e integrações externas
  • Cada tecnologia usada no seu ponto forte
  • Integração com SaaS e serviços externos via EventBridge sem expor MSK
Contras
  • Complexidade operacional dobrada, dois sistemas de mensageria para manter
  • Bridge entre MSK e EventBridge requer Lambda ou Connector, ponto adicional de falha
  • Custo combinado mais alto no curto prazo

Válido como evolução futura quando integrações externas escalarem; prematuro como ponto de partida

Decisão de Arquitetura

Aceito
Contexto

O sistema de processamento de pedidos requer um backbone de eventos que garanta ordenação por pedido, suporte replay granular por consumer group, sustente picos de throughput sazonais e opere com um time de plataforma pequeno. O stack existente é 100% AWS.

Decisão

Adotar Amazon MSK (Kafka gerenciado) como backbone de eventos para o sistema de pedidos. Utilizar MSK Serverless na fase inicial para reduzir overhead de capacity planning, com migração para MSK Provisioned quando o volume justificar controle granular de partições e throughput. Particionamento por `orderId` para garantir ordenação. Retenção de log de 7 dias como padrão, extensível para 30 dias para o tópico de pedidos. EventBridge permanece no stack para integrações com serviços externos e notificações, alimentado por um consumer MSK dedicado.

Consequências
  • ✅ Ordenação por pedido garantida nativamente via particionamento por orderId
  • ✅ Replay independente por consumer group, analytics e fraude podem reprocessar sem afetar pagamentos
  • ✅ Headroom de throughput real para crescimento orgânico e picos sazonais
  • ✅ Log imutável como fonte de verdade auditável para compliance e debugging
  • ⚠️ Custo fixo de infraestrutura MSK mesmo em períodos de baixo volume (mitigado por MSK Serverless inicialmente)
  • ⚠️ A equipe precisará adquirir competência operacional em Kafka: consumer lag monitoring, offset management, rebalancing

Detalhes de Implementação e Riscos Operacionais

Estratégia de particionamento: A chave de partição deve ser o orderId. Isso garante que todos os eventos de um pedido específico sejam escritos na mesma partição e, portanto, consumidos em ordem. O número inicial de partições para o tópico orders deve ser calculado com base no throughput de pico esperado dividido pelo throughput por partição sustentável (tipicamente 1-10 MB/s dependendo do tamanho da mensagem e configuração do broker). Para o volume estimado, 12 partições é um ponto de partida razoável, permite até 12 instâncias paralelas de um consumer group sem rebalancing.

Retenção e replay: Configurar retention.ms para 604800000 (7 dias) no tópico principal. Para o tópico de pedidos, considerar 30 dias dado o requisito de reprocessamento do time de analytics. O replay é operacionalizado via reset de offset do consumer group, o time deve ter runbooks documentados para essa operação, incluindo como pausar o consumer de produção antes do replay para evitar processamento duplicado não intencional.

Consumer criticality tiers: Nem todos os consumers têm o mesmo SLA. Pagamentos e estoque são críticos, devem rodar em ECS/Fargate com auto-scaling baseado em consumer lag (métrica EstimatedMaxTimeLag no CloudWatch MSK). Notificações e analytics podem usar Lambda via MSK Event Source Mapping, aceitando latência maior em troca de menor custo operacional.

Dead Letter Queue: Cada consumer deve ter uma DLQ (SQS) para mensagens que falham após N tentativas. O schema de retry deve ser exponential backoff com jitter. Mensagens na DLQ devem gerar alertas no CloudWatch e ter processo de reprocessamento manual documentado.

Risco de rebalancing: Em consumers ECS, o rebalancing do Kafka pode causar pausas de processamento de segundos a dezenas de segundos dependendo do tamanho do grupo e da estratégia de rebalancing. Configurar partition.assignment.strategy=CooperativeStickyAssignor para minimizar o impacto. Monitorar RebalanceLatency e alertar se exceder thresholds aceitáveis.

MSK Serverless vs Provisioned: MSK Serverless simplifica o início, mas tem limitações: throughput máximo de 200 MB/s de escrita e 400 MB/s de leitura por cluster, sem controle de número de partições (gerenciado automaticamente), e custo por unidade de capacidade que pode ser mais alto que Provisioned em volumes altos. A migração para Provisioned deve ser planejada quando o volume mensal de dados processados tornar o custo por unidade de capacidade desfavorável, tipicamente acima de alguns TB/mês (estimativa).

Arquitetura Resultante: Backbone MSK para Processamento de Pedidos

Fluxo de eventos desde a criação do pedido até os consumidores downstream, com MSK como backbone central, DLQs por consumer e EventBridge para integrações externas.

🛒 Order Service
  • Order API · ECS/Fargate
  • Orders DB · RDS Aurora
📨 MSK Backbone
  • Amazon MSK · orders topic · 12 partitions / key=orderId
⚙️ Critical Consumers (ECS/Fargate)
  • Payments Consumer · ECS/Fargate
  • Inventory Consumer · ECS/Fargate
  • Fraud Consumer · ECS/Fargate
⚡ Async Consumers (Lambda)
  • Notifications Consumer · Lambda (MSK trigger)
  • Analytics Consumer · Lambda (MSK trigger)
🔀 External Integration
  • EventBridge Bridge · Lambda Consumer
  • Amazon EventBridge · Custom Event Bus
  • External SaaS · (CRM, ERP, etc.)
🚨 Error Handling
  • DLQ Payments · SQS
  • DLQ Inventory · SQS
  • DLQ Generic · SQS
  • CloudWatch · Lag Alerts
📦 Downstream Storage
  • S3 · Analytics Lake

Comparativo Técnico: EventBridge vs MSK para Pedidos

DimensãoEventBridgeAmazon MSKRelevância para Pedidos
OrdenaçãoSem garantiaGarantida por partição🔴 Crítico, sequência de estados é obrigatória
ReplayArchive com limitações de filtragemOffset reset por consumer group🔴 Crítico, analytics e fraude precisam de replay independente
Throughput10k eventos/s default (soft limit)Centenas de MB/s🟡 Relevante para picos sazonais
Overhead operacionalMínimo, serverlessModerado, partições, lag, rebalancing🟡 Relevante, time pequeno
CustoPor evento publicadoFixo por broker-hora + armazenamento🟡 MSK Serverless mitiga custo fixo inicial
Fan-out desacopladoNativo via regrasVia consumer groups🟢 Ambos adequados
Integração AWS nativa200+ serviços sem códigoVia Lambda/ECS consumers🟢 EventBridge superior para integrações externas
Retenção de logArchive indefinido (mas replay operacional limitado)Configurável: horas a semanas🔴 MSK superior para auditoria e reprocessamento

Análise Well-Architected

Segurança

MSK suporta autenticação via IAM (MSK IAM Auth), TLS em trânsito e criptografia em repouso com KMS. Consumer groups isolados por IAM policy garantem que o consumer de analytics não possa escrever no tópico de pedidos. VPC-only access elimina exposição pública. EventBridge bridge usa IAM role com permissões mínimas.

Confiabilidade

MSK multi-AZ com replication factor 3 garante durabilidade mesmo com falha de um broker. DLQs por consumer evitam que falhas em um downstream bloqueiem outros. Consumer lag monitoring com alertas garante detecção precoce de consumers atrasados. MSK Serverless tem SLA de 99.9% de disponibilidade.

Eficiência de performance

Particionamento por orderId distribui carga uniformemente e garante paralelismo. Consumers críticos em ECS/Fargate com auto-scaling baseado em consumer lag respondem a picos em minutos. Batch size e fetch.min.bytes configuráveis para otimizar throughput vs latência por consumer.

Otimização de custos

MSK Serverless na fase inicial evita custo fixo de brokers provisionados. Migração para Provisioned quando volume justificar. Retenção de 7 dias como padrão, tópicos de analytics com 30 dias têm custo de armazenamento incremental. Consumers Lambda para workloads async reduzem custo de ECS.

Sustentabilidade

MSK Serverless escala para zero em períodos de baixo uso, reduzindo consumo de recursos ociosos. Retenção de log configurável evita armazenamento desnecessário de dados históricos além do período de utilidade operacional.

FA
Minha Perspectiva Sênior
Arquiteto de TI Especialista

Eu vejo esse debate EventBridge vs Kafka com frequência, e o erro mais comum é enquadrar a decisão como "qual é mais simples de operar" em vez de "qual resolve os requisitos funcionais corretamente". EventBridge é uma ferramenta excelente, eu a uso extensivamente para integrações entre serviços, notificações e fan-out de eventos de domínio onde ordenação não é crítica. Mas para um backbone de pedidos, a falta de ordenação garantida não é um detalhe de implementação, é uma falha estrutural. O que me preocupa mais nesse tipo de decisão não é a escolha da tecnologia em si, mas a tendência de subestimar o custo de não ter replay. Todo sistema de pedidos vai precisar de replay em algum momento, um bug no consumer de estoque, uma mudança no modelo de fraude, uma migração de schema. Se você construiu sobre EventBridge e não planejou o Archive com cuidado, esse replay vai ser doloroso ou impossível. Com MSK, é uma operação de 5 minutos com um runbook. Sobre a carga operacional: sim, Kafka tem curva de aprendizado. Mas MSK Serverless reduziu significativamente o overhead de operação para casos de uso como esse. O time não precisa gerenciar brokers, ZooKeeper ou replication manualmente. O que precisa é entender consumer groups, offsets e lag monitoring, e isso é conhecimento que vale a pena ter em qualquer time que trabalha com sistemas distribuídos. Minha recomendação prática: comece com MSK Serverless, invista 2 sprints em runbooks e observabilidade de lag, e use EventBridge apenas para o que ele faz melhor, integração com serviços externos e notificações.

Veredicto

Amazon MSK é a escolha correta para o backbone de eventos de um sistema de processamento de pedidos. Os três requisitos que definem essa decisão, ordenação por pedido, replay granular por consumer e retenção de log como fonte de verdade, são atendidos nativamente pelo modelo de log distribuído do Kafka e não têm equivalente funcional no EventBridge. EventBridge não é descartado: ele permanece no stack como camada de integração para serviços externos e SaaS, alimentado por um consumer MSK dedicado. Essa separação de responsabilidades é a arquitetura correta, não uma concessão. O custo operacional de MSK é real e não deve ser minimizado. A mitigação é MSK Serverless na fase inicial e investimento deliberado em observabilidade de consumer lag e runbooks operacionais. Um time que entende offsets e consumer groups é um time mais resiliente, independentemente da tecnologia de mensageria que usar no futuro. A lição transferível: a escolha entre um event router e um log distribuído não é sobre preferência ou simplicidade, é sobre quais garantias semânticas o seu domínio exige. Identifique essas garantias primeiro; a tecnologia segue.

Referências

Amazon EventBridge: Official DocumentationAmazon MSK (Managed Streaming for Apache Kafka): Official Documentation
#event-driven#eventbridge#kafka#msk#order-processing#adr#aws#messaging
Fontes do caso
AWS: Amazon EventBridgeAWS: Amazon MSK
Compartilhar:LinkedInWhatsAppXBaixar em Markdown
Escrito com apoio de IA a partir do caso público e da minha leitura como arquiteto.
Próximo passo
Trilha Arquiteto de IA, gratuitaFundamentos, LLMs, RAG, tools, MCP e arquitetura na AWS, em aulas curtas e interativas.Começar a trilhaAgentes de IA em produção na AWSComo eu desenho, oriento e audito agentes que vão ao ar, com os números e as fontes.Ver o IA Builder

Continue lendo

Decisão (ADR)ADR: levar agentes governados para o Amazon QuickA integração entre Amazon Quick e AWS Agent Registry muda o ponto de controle: o problema deixa de ser conectar cada MCP manualmente e passa a ser governar um catálogo consumível por usuários de negócio. Eu trataria isso como uma decisão de plataforma, não como uma conveniência de console.Ler Decisão (ADR)ADR: S/4HANA em Hong Kong: X2idn chegou, migrar agora ou esperar X8i?Em 11 de setembro de 2026 a AWS habilitou as instâncias X2idn em Asia Pacific (Hong Kong). Para um core financeiro em S/4HANA que não pode sair da região, é a primeira instância Nitro de 2 TiB certificada para HANA produtivo ali: 49% mais SAPS e 5,7× mais banda de EBS que o x1.32xlarge. Este ADR registra por que eu migro agora, aceitando uma segunda migração para X8i quando ela chegar.Ler Decisão (ADR)ADR: Migrando Workloads Financeiros para EC2 R8i no Tokyo e FrankfurtA disponibilidade das instâncias EC2 R8in, R8ib, R8idn e R8idb em Tokyo, Frankfurt e Irlanda abre uma janela de decisão real para arquiteturas financeiras que dependem de latência de rede sub-milissegundo, throughput EBS extremo e conformidade de residência de dados. Este ADR documenta o raciocínio por trás da adoção, ou não, dessas instâncias em workloads de grau financeiro.Ler
AnteriorPlaybook: Como Blindar um Agente de IA: As Camadas de DefesaPróximoDesign Doc: API de Pagamentos Multi-Região Active-Active
Gostou deste estudo? Receba o próximo.

Post-mortems, ADRs e deep dives de arquitetura no seu email, do jeito que um arquiteto lê.

Sem spam · cancele quando quiser

Pergunte ao Fernando sobre isto

Uma resposta focada sobre este estudo, do meu assistente de IA, baseada no meu trabalho.

Participe da conversa

Entre para comentar

Confirme seu e-mail para participar, você também recebe a newsletter. Sem senha.

Neste estudo
Contexto e Forças em JogoPor Que Esta Decisão É Não-TrivialOpções AvaliadasDecisão de ArquiteturaDetalhes de Implementação e Riscos OperacionaisArquiteturaComparativo Técnico: EventBridge vs MSK para PedidosWell-ArchitectedVeredictoReferências