2016-02-12 72 views
1

我正在爲即將到來的一組模式創建一個新的事件和流處理系統,我們正在我的公司構建幾個當前斷開的系統。我們已經明確定義了12個領域模型,並且正在嘗試將所有應用程序將事件推出到匯合(kafka)平臺的一組事件模式。然後,這些將由samza提取和處理,以執行各種作業,然後填充我們的特定於域的服務的數據庫。事件流數據模型

這一切都很好,我們從每個域的一個事件(例如地址)開始。但是,我們很快就遇到了不同類型事件需要不同數據的問題。例如,創建地址的事件需要域中的所有(或大部分)字段。而更新只需要一個id和正在更新的內容。

那麼,我在尋找的是那些過去做過這些的人的一些建議嗎?理想情況下,我希望每個域只有一個事件模式保持清潔。這樣我們就有一個相應的卡夫卡隊列,每個事件可以很容易地重播以重新獲得狀態或返回到特定的先前狀態。然而,這感覺就像是更簡單和更務實的方法是使用一個單獨的模式爲每個動詞(即創建,更新,刪除)

一些相關的堆棧細節:

匯合REST代理 - > Avro公司 - > kafka - > samza - >各種dbs。

回答

2

這個問題是相當古老的,但它還沒有得到答覆,我會試一試。問題在於你的事件應該反映出你商業模式中的狀態變化,這通常會反映已發生的活動。看着你的榜樣,你可能有這樣的事件:

  • NEWUSER,地址可能會或可能不會在你的系統,但你仍然需要有決定是否是這樣的情況或不自然的關鍵。
  • UserRelocating,同上
  • UserLeaving,同樣
  • AddressCorrection,可能只有等領域的部分可能需要提供

他們顯然只是一個例子,你決定了事件的場景取決於您的商業模式。