Pular para o conteúdo principal

Pergunta 10 de 50

Um Producer pode ser um microsserviço?

PlenoSênior

Pergunta

"Um microsserviço pode ser um Producer Kafka? Como isso normalmente aparece no código?"

O que o entrevistador quer avaliar

Se você conecta o conceito abstrato de "Producer" com a forma real como ele aparece em uma arquitetura de microsserviços — não é uma pergunta sobre uma entidade separada, é sobre um papel que o próprio serviço assume.

Resposta rápida

Sim. Na prática, o producer quase sempre é parte de um microsserviço já existente — ele não é uma peça de infraestrutura separada. O serviço de pagamentos, por exemplo, além de expor sua API e persistir dados, também publica eventos no Kafka como efeito colateral de operações de negócio, tipicamente logo após gravar uma mudança de estado no banco.

Resposta nível Sênior

"Producer" é um papel, não uma entidade separada — qualquer aplicação que chama a API de produção do Kafka (diretamente ou via um client como o Spring Kafka) atua como producer naquele momento. Em uma arquitetura de microsserviços, o padrão mais comum é: o serviço processa uma operação de negócio, persiste o resultado no seu banco e, em seguida, publica um evento representando esse fato — por exemplo, o serviço de pagamentos grava "pagamento aprovado" no banco e publica PagamentoAprovado no Kafka. Isso levanta um problema real de consistência conhecido como dual write — e se a escrita no banco tiver sucesso mas a publicação no Kafka falhar (ou vice-versa)? Esse problema é resolvido com o padrão transactional outbox, coberto no Capítulo 12, que garante que a publicação do evento seja atômica com a escrita no banco.

Explicação aprofundada

Veja "Relação com Java e Spring Boot" no Capítulo 3 e o Capítulo 12 sobre transações e outbox pattern para o problema de dual write.

Exemplo financeiro

O microsserviço de concessão de crédito, ao aprovar um limite, grava a decisão na tabela decisoes_credito e publica o evento CreditoAprovado no mesmo fluxo — idealmente de forma atômica via outbox, para que uma falha de rede ao publicar no Kafka não deixe o banco e o Kafka inconsistentes entre si.

"O Producer é um componente separado do Kafka, tipo um proxy"

Não existe um "serviço Producer" genérico rodando ao lado do Kafka. Producer é qualquer código de aplicação que usa o client do Kafka para publicar — geralmente dentro do próprio microsserviço de domínio.

Pode vir a seguir

Follow-up esperado: "o que acontece se a escrita no banco tiver sucesso mas a publicação no Kafka falhar?" — que leva direto ao outbox pattern.