Pergunta 10 de 50
Um Producer pode ser um microsserviço?
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.
Capítulos relacionados