ton*_*008 6 cqrs event-sourcing apache-kafka eventsource apache-kafka-streams
我目前正在评估设计/实施事件溯源 + CQRS 系统设计架构方法的选项。由于我们想将 Apache Kafka 用于其他方面(正常的发布 -订阅消息 + 流处理),下一个合乎逻辑的问题是,“我们可以使用 Apache Kafka 存储作为 CQRS 的事件存储吗?”,或者更重要的是明智的决定?
现在我不确定这一点。这个来源似乎支持它:https : //www.confluent.io/blog/okay-store-data-apache-kafka/
这个其他来源建议反对:https : //medium.com/serialized-io/apache-kafka-is-not-for-event-sourcing-81735c3cf5c
在我目前的测试/实验中,我遇到了与第二个来源描述的问题类似的问题,这些问题是:
尽管这个问题有点开放,但实际上是这样的:您是否使用 Kafka 作为事件源系统上的主要事件存储?您如何处理从其命令历史记录中重组实体实例的问题(鉴于该主题有数百万个条目扫描所有集合不是一种选择)?您是否只使用了 1 个分区来牺牲潜在的并发消费者(假设订单保证仅限于特定主题分区)?
任何具体的或一般的反馈都将不胜感激,因为这是一个复杂的话题,有几个考虑因素。
提前致谢。
编辑 6 年前这里有一个类似的讨论: Using Kafka as a (CQRS) Eventstore。好主意? 当时的共识也存在分歧,很多人认为这种方法很方便,提到了 Kafka 如何在本地处理大量实时数据。尽管如此,问题(至少对我而言)与此无关,而是与 Kafka 重建实体状态的能力有多么不方便有关 - 要么通过将主题建模为实体实例(其中主题数量呈指数级增长是不希望的) ,或通过建模主题 es 实体类型(其中主题内的大量事件使重建非常缓慢/不切实际)。
您的理解大部分是正确的:
所有这些都不会阻止应用程序使用 kafka 作为其状态的事实来源,只要:
samza 和 (IIUC) kafka-streams 都使用日志压缩的 kafka 主题来支持它们的状态存储。在 kafka 内部,偏移量和消费者组管理存储为日志压缩主题,代理在内存中保存“物化视图”——当__consumer_offsets
代理之间移动分区的所有权时,新领导者会重播该分区以重建此视图。
归档时间: |
|
查看次数: |
873 次 |
最近记录: |