如何使用Kafka实施事件搜索?

时间:2019-01-19 14:21:23

标签: apache-kafka event-sourcing

我想使用kafka作为事件存储来实现事件源模式。 我想让它尽可能简单。

想法:

我的应用包含客户列表。创建和删除客户。很简单的。 收到创建客户的请求时,我正在创建事件CUSTOMER_CREATED,其中包括客户数据,并使用KafkaProducer将其存储在kafka主题中。使用事件CUSTOMER_DELETED删除客户时也是如此。

现在,当我要列出所有客户时,我必须重播到目前为止发生的所有事件,然后获取当前状态,即所有客户的列表。

我将创建一个临时客户列表,然后一个个处理所有事件(创建客户,创建客户,删除客户,创建客户等)。 (使用KafkaConsumer消耗这些事件)。最后,我返回了临时列表。

我想使其尽可能简单,这只是让我了解事件源在实践中如何工作。这是事件来源吗?还有:以这种方式实现快照时如何创建快照?

1 个答案:

答案 0 :(得分:1)

  

当我要列出所有客户时,我必须重播到目前为止发生的所有事件

您实际上并没有,或者至少在您的应用程序重新启动并积极收集/删除数据之后才这样做。我鼓励您查找“流表对偶”,该流对偶基本上说明您的表是系统中当前的状态,并且是到目前为止所有流事件的时间快照,该快照为(({{1 }} + customers added)-customers modified)。

在Kafka中实现此方法的方式是为客户使用紧凑的Kafka主题,该主题可以读入Kafka Streams KTable,并持久存储在内存中或溢出到磁盘(由RocksDB支持)。消息密钥可以是客户的一些UUID,也可以是其他无法更改的可识别记录(例如,姓名,电子邮件,电话等,因为所有这些都可以更改)

这样,您可以在其上实施Interactive Queries来扫描或查找特定客户的详细信息。