2016-02-12 46 views
1

我正在为即将到来的一组模式创建一个新的事件和流处理系统,我们正在我的公司构建几个当前断开的系统。我们已经明确定义了12个领域模型,并且正在尝试将所有应用程序将事件推出到汇合(kafka)平台的一组事件模式。然后,这些将由samza提取和处理,以执行各种作业,然后填充我们的特定于域的服务的数据库。事件流数据模型

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

那么,我在寻找的是那些过去做过这些的人的一些建议吗?理想情况下,我希望每个域只有一个事件模式保持清洁。这样我们就有一个相应的卡夫卡队列,每个事件可以很容易地重播以重新获得状态或返回到特定的先前状态。然而,这感觉就像是更简单和更务实的方法是使用一个单独的模式为每个动词(即创建,更新,删除)

一些相关的堆栈细节:

汇合REST代理 - > Avro公司 - > kafka - > samza - >各种dbs。

回答

2

这个问题是相当古老的,但它还没有得到答复,我会试一试。问题在于你的事件应该反映出你商业模式中的状态变化,这通常会反映已发生的活动。看着你的榜样,你可能有这样的事件:

  • NEWUSER,地址可能会或可能不会在你的系统,但你仍然需要有决定是否是这样的情况或不自然的关键。
  • UserRelocating,同上
  • UserLeaving,同样
  • AddressCorrection,可能只有等领域的部分可能需要提供

他们显然只是一个例子,你决定了事件的场景取决于您的商业模式。