在我目前的项目中,我使用Kafka和Cassandra之间的组合来实现域服务(CQRS)所需的事件存储。现在我正处于进行事件演进的阶段,我想再次重建查询方面。我发现我在Kafka和Cassandra都有同样的事件,这是我不满意的冗余。无论如何,我现在有两个选择:
答案 0 :(得分:0)
我不相信这个问题有一个确凿的答案,因为这两种方法都有效。然而,这是我的2便士'值得的。另外,我对两个真理来源的想法并不完全感到满意(Cassandra 和 Kafka) - 你可能想要回顾一下这个决定背后的理由。
TL; DR:如果你需要重建整个"那么从卡夫卡读书是好的。查看模型。但是,在撰写和阅读活动时需要采取特殊的预防措施。
Kafka可以作为(半)永久存储运行,因为事件会在日志中保留一段用户可配置的时间。除此之外,向Kafka的日志添加事件是一项非常便宜的操作O(1)
。因此,您可以根据需要保留数据,而不会对解决方案的性能产生重大影响。
但是,使用Kafka作为事件存储需要一些特殊的预防措施。首先,Kafka的订单保证仅适用于分区而不适用于整个主题;因此,每个streamID都需要写在同一个分区中。
同样适用于阅读方:为了重新构建读取模型,您需要按顺序读取(同时从不同分区读取将是并行的,特别是如果您使用使用者组)整个分区来自偏移0。
考虑到这一点,如果您需要重建整个模型(因此您不需要选择特定的流)或构建投影,我只需使用Kafka。