事件流数据模型

Event stream data models

我正在努力为我们正在我公司构建的新事件和流处理系统提出一组模式,以将几个当前断开连接的系统连接在一起。我们已经明确定义了 12 个领域模型,现在正尝试将所有应用程序事件输出到融合(kafka)平台的一组事件模式组合在一起。然后这些将被 samza 拾取和处理以执行各种工作,然后为我们的域特定服务填充数据库。

一切都很好,我们从每个域(例如地址)一个事件开始,但是,我们很快 运行 解决了我们需要不同类型事件的不同数据的问题。例如,创建地址的事件需要域中的所有(或大部分)字段。而更新只需要一个 ID 和正在更新的内容。

那么,我要找的是过去做过这件事的人的一些建议吗?理想情况下,我希望每个域只使用一个事件模式来保持清洁。这样我们每个事件都有一个对应的 kafka 队列,可以很容易地重播以重新获得状态或 return 到特定的先前状态。但是,感觉更简单、更实用的方法是为每个动词(即创建、更新、删除)使用单独的模式

一些相关的堆栈细节:

Confluent REST 代理 -> avro -> kafka -> samza -> 各种数据库。

这个问题很老了,但由于还没有回答,我会试一试。问题是您的事件应该反映您的业务模型中的状态变化,这通常会反映已经发生的 activity。查看您的示例,您可能会遇到以下事件:

  • 新用户,地址可能在你的系统中,也可能不在你的系统中,但你仍然需要有一个自然键来决定是否是这样。
  • UserRelocating,同上
  • 用户离开,相同
  • AddressCorrection,可能是只需要提供部分字段的场景

它们显然只是示例,您决定的事件取决于您的业务模型。