如何重建CQRS中的视图模型(预测)?

时间:2017-10-23 08:46:02

标签: cassandra apache-kafka cqrs event-store

在我目前的项目中,我使用Kafka和Cassandra之间的组合来实现域服务(CQRS)所需的事件存储。现在我正处于进行事件演进的阶段,我想再次重建查询方面。我发现我在Kafka和Cassandra都有同样的事件,这是我不满意的冗余。无论如何,我现在有两个选择:

  1. 从Cassandra中拉出所有事件并将它们放入一个主题中进行查询 一边重建意见。
  2. 重置使用者组的偏移量,这将使查询服务回复主题内的所有事件。 (一世 然而,更多的是,我对数据的持久性持怀疑态度 如果我跑了几个月或几年话题。

1 个答案:

答案 0 :(得分:0)

我不相信这个问题有一个确凿的答案,因为这两种方法都有效。然而,这是我的2便士'值得的。另外,我对两个真理来源的想法并不完全感到满意(Cassandra Kafka) - 你可能想要回顾一下这个决定背后的理由。

TL; DR:如果你需要重建整个"那么从卡夫卡读书是好的。查看模型。但是,在撰写和阅读活动时需要采取特殊的预防措施。

Kafka可以作为(半)永久存储运行,因为事件会在日志中保留一段用户可配置的时间。除此之外,向Kafka的日志添加事件是一项非常便宜的操作O(1)。因此,您可以根据需要保留数据,而不会对解决方案的性能产生重大影响。

但是,使用Kafka作为事件存储需要一些特殊的预防措施。首先,Kafka的订单保证仅适用于分区而不适用于整个主题;因此,每个streamID都需要写在同一个分区中。

同样适用于阅读方:为了重新构建读取模型,您需要按顺序读取(同时从不同分区读取将是并行的,特别是如果您使用使用者组)整个分区来自偏移0。

考虑到这一点,如果您需要重建整个模型(因此您不需要选择特定的流)或构建投影,我只需使用Kafka。