1

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

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

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

一些相关的堆栈细节:

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

4

1 回答 1

2

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

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

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

于 2017-07-14T12:39:04.697 回答