首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CQRS中的可用性与原子更新

CQRS中的可用性与原子更新
EN

Stack Overflow用户
提问于 2022-06-07 16:05:00
回答 1查看 121关注 0票数 1

我试图使用以下组件实现CQRS设计:

数据库->Debezium (CDC) ->Kafka->Kafka(读取视图更新器)->Read视图

数据库可以是MySQL或PostgreSQL,Kafka流可以充当事件处理器/读取视图更新程序,对cdc事件进行必要的转换并更新读取视图。

  • 如何通过以下配置实现高可用性?(我听说一旦源DB或Debezium本身下降,CDC流就会停止)
  • 是否能够精确地完成一次/至少一次事件处理?在失败的情况下,有可能得到重复的消息,这可能导致相同的数据存储在读取端。如何在CQRS configuration?
  • Does中实现幂等性?任何人都有不同的体系结构建议或技术栈来实现高可用性和原子更新的CQRS,使用精确的一次/至少一次消息处理?
EN

回答 1

Stack Overflow用户

发布于 2022-06-07 17:07:19

当源数据库停止时CDC将停止。CDC停止不会影响读取视图的可用性。

准确地说,在一般情况下,一次更新读取视图(这是人们几乎肯定关心的内容)是不可能的。如果使用Kafka的流和更新read视图可以原子地提交消息的偏移量,作为更新读取视图的一部分,则可以保证只更新一次。至于Debezium可能发布重复的更改记录(它可能会这样做:幂等产品AFAIK尚未进入),取决于DB,更改记录可能在有效负载中有一个before字段。此字段可用于验证更改是否来自与读取视图相对应的状态(并忽略不适用的更改)。

如果写入模型是事件源的,而不是就地更新的,那么您可能会发现更容易实现对读模型的幂等投影:事件通常有一个每个实体的序列号,这可以使“有效地-一次”(至少是一次与幂等用户一起)变得更容易。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72534398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档