发布到kafka成功,数据库更新失败,如何在分布式系统中保持一致性



我正在开发一个分布式系统(电子商务(,并使用Kafka事件在系统之间进行通信。因此,根据我们的业务逻辑,我们首先发布Kafka主题(这是成功的(,然后更新oracle数据库。有时数据库中的更新会失败,如何保持系统之间的状态一致性?由于另一个系统将用新的订单状态更新其数据库,但生产商将只有旧的状态,那么如何减少这种不一致性呢?

您所使用的实际上是调用双重写入,这可能会由于许多丑陋的问题而导致永久的不一致性,如部分失败,如您的情况、种族条件。。。

我发现一种非常有趣的方法是使用change data capture来保持不同的数据系统彼此同步。

强烈推荐Martin Kleppmann关于如何使用这种架构的博客:

  1. 使用日志构建坚实的数据基础架构
  2. 保持同步:从事务到流

最新更新