我试图使用以下组件实现CQRS设计:
数据库->Debezium (CDC) ->Kafka->Kafka(读取视图更新器)->Read视图
数据库可以是MySQL或PostgreSQL,Kafka流可以充当事件处理器/读取视图更新程序,对cdc事件进行必要的转换并更新读取视图。
发布于 2022-06-07 17:07:19
当源数据库停止时CDC将停止。CDC停止不会影响读取视图的可用性。
准确地说,在一般情况下,一次更新读取视图(这是人们几乎肯定关心的内容)是不可能的。如果使用Kafka的流和更新read视图可以原子地提交消息的偏移量,作为更新读取视图的一部分,则可以保证只更新一次。至于Debezium可能发布重复的更改记录(它可能会这样做:幂等产品AFAIK尚未进入),取决于DB,更改记录可能在有效负载中有一个before
字段。此字段可用于验证更改是否来自与读取视图相对应的状态(并忽略不适用的更改)。
如果写入模型是事件源的,而不是就地更新的,那么您可能会发现更容易实现对读模型的幂等投影:事件通常有一个每个实体的序列号,这可以使“有效地-一次”(至少是一次与幂等用户一起)变得更容易。
https://stackoverflow.com/questions/72534398
复制相似问题