O Kafka pode ser usado para fornecer transações entre microsserviços?
Digamos que construímos uma loja online simples com 2 microsserviços: pedido e armazenamento.
Ao fazer um pedido, você também deseja atualizar a quantidade de um produto no armazenamento. Mas quando esta ação falha, você não deseja fazer um pedido. Além disso, quando a colocação do pedido falha, você deseja reverter a atualização do armazenamento.
Isso pode ser facilmente alcançado usando kafka? Seria a melhor solução possível para fornecer consistência entre microsserviços? E se sim, toda a comunicação entre microsserviços deve ser feita usando Kafka?
Sim, Kafka tem transações.
O produtor pode iniciar e encerrar essa transação, mas o consumidor também precisa definir seu nível de isolamento de leitura para detectar marcadores de transação.
https://developer.confluent.io/learn/kafka-transactions-and-guarantees/
Existem outros padrões para resolver o mesmo problema, como Distributed Sagas e Outbox Pattern
https://developers.redhat.com/blog/2018/10/01/patterns-for-distributed-transactions-within-a-microservices-architecture
https://www.infoq.com/articles/saga-orchestration-outbox/