kafka 作为事件源系统中的事件存储
Posted
技术标签:
【中文标题】kafka 作为事件源系统中的事件存储【英文标题】:kafka as event store in event sourced system 【发布时间】:2014-11-21 12:32:16 【问题描述】:这个问题类似于Using Kafka as a (CQRS) Eventstore. Good idea?,但更具体的实现。 当我有数千个事件“源”(DDD 中的聚合根)时,如何使用 kafka 作为事件存储?正如我在链接问题和其他一些地方所读到的,我会遇到每个来源的主题问题。如果我按类型将事件拆分为主题,则使用和存储会容易得多,但我需要访问特定源的事件流。如何使用 kafka 进行事件溯源?
【问题讨论】:
您提到的基于实体实例的主题是行不通的,因为它会创建大量主题(至于 kafka 并非旨在处理)。唯一真正的可能性是基于类型的主题,但这会产生搜索仅与 1 个特定聚合实例相关的命令/事件的问题。您如何解决快速搜索事件(在基于类型的主题内)以重建实体实例的问题? 【参考方案1】:将所有事件源发布到具有数据类型(thrift?)的单个主题,其中包含每个事件源的一些唯一标识符。然后为您感兴趣的每种事件类型创建消费者,并使用唯一的消费者组名称标识每个消费者。这样每个唯一的源消费者将在 zookeeper 中拥有自己的偏移值。每个人都阅读整个主题,但只输出(或处理)来自单个来源(或一组来源)的信息。
【讨论】:
以上是关于kafka 作为事件源系统中的事件存储的主要内容,如果未能解决你的问题,请参考以下文章