如何在cqrs中重建视图模型(投影)?

cld4siwp  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(424)

在我当前的项目中,我使用kafka和cassandra之间的组合来实现我需要到域服务(cqrs)的事件存储。现在我正处于事件演化阶段,我想再次重建查询端。我发现我在Kafka和Cassandra身上都有相同的事件,这是一种我不习惯的冗余。不管怎样,我现在有两个选择:
从cassandra中提取所有事件,并将它们扔到查询端的主题中以重建视图。
重置使用者组的偏移量,这将使查询服务答复主题内的所有事件(我更喜欢这样,但是,我对这个主题中的数据持久性持怀疑态度(如果我运行数月或数年)。

hts6caw3

hts6caw31#

我不相信这个问题有一个结论性的答案,因为这两种方法都会奏效。不过,这是我两便士的钱。另外,我对拥有两个真相来源(Cassandra和Kafka)的想法并不完全满意——你可能想回顾一下这个决定背后的理由。
热释光;博士:阅读Kafka是很好的,如果你需要重建“整体”视图模型。但是,在编写和阅读事件时需要特别注意。
kafka可以作为一个(半)永久性的存储运行,在这个存储中,事件会在日志中保留一段用户可配置的时间。除此之外,在Kafka的日志中添加一个事件是一个非常廉价的操作, O(1) . 因此,您可以按自己的意愿保留数据,而不会对解决方案的性能产生重大影响。
然而,使用Kafka作为事件存储需要一些特殊的预防措施。首先,Kafka的秩序保障只适用于分割,而不适用于整个主题;因此,每个streamid都需要写在同一个分区中。
这同样适用于读取端:为了重新构建读取模型,您需要从偏移量0开始顺序读取整个分区(同时从不同分区读取将是并行的,尤其是在使用使用者组的情况下)。
记住这一点,如果您需要重建整个模型(因此您不需要选择特定的流)或构建投影,我只需要使用kafka。

相关问题