Kafka可以用来提供微服务之间的事务吗?
假设我们构建了一个简单的在线商店,包含 2 个微服务:订单和存储。
下订单时,您还想更新仓库中产品的数量。但当此操作失败时,您就不想下订单了。此外,当下订单失败时,您希望回滚存储的更新。
使用kafka可以轻松实现这一点吗?这是否是提供跨微服务一致性的最佳解决方案?如果是这样,微服务之间的所有通信都应该使用 Kafka 完成吗?
Kafka可以用来提供微服务之间的事务吗?
假设我们构建了一个简单的在线商店,包含 2 个微服务:订单和存储。
下订单时,您还想更新仓库中产品的数量。但当此操作失败时,您就不想下订单了。此外,当下订单失败时,您希望回滚存储的更新。
使用kafka可以轻松实现这一点吗?这是否是提供跨微服务一致性的最佳解决方案?如果是这样,微服务之间的所有通信都应该使用 Kafka 完成吗?
是的,Kafka有交易。
生产者可以开始和结束该事务,但消费者还需要设置其读取隔离级别以检测事务标记。
https://developer.confluence.io/learn/kafka-transactions-and-guarantees/
还有其他模式可以解决相同的问题,例如分布式 Sagas 和发件箱模式
https://developers.redhat.com/blog/2018/10/01/patterns-for-distributed-transactions-within-a-microservices-architecture
https://www.infoq.com/articles/saga-orchestration-outbox/