0

我有一個用例,其中應用程序的輸入分批進入XML文件。例如,每晚的一批銀行交易。我正在嘗試查看是否可以使用事件採購創建事件日誌。根據我目前閱讀的內容,這些示例似乎基於用戶驅動的輸入(點擊流,來自用戶界面的更新等)。使用分佈式日誌機制(如Kafka)的事件採購是基於批處理/文件的輸入的有效方法嗎?事件採購是否適用於批量輸入?

下面是我想採取的方法:

  1. 接受輸入的文件/ XML
  2. 運行在內存的一些基本驗證了一批。
  3. 將批量輸入轉換爲一系列事件
  4. 將事件日誌寫入Kafka主題。
  5. 使用事件日誌將數據存儲到數據庫,發送事件 到搜索引擎,更新緩存,運行火花工作要做聚合 等,
  6. 重複此過程,對於其他傳入批次。

如果這種方法效率不高,還有哪些其他選項可用於分佈式處理此類輸入?

回答

0

您的輸入是否來自看起來像事件存儲的東西?即一個充當事實不變源的數據庫,只追加事件。

如果是這種情況,您可以使用事件源以及CQRS。 (他們不是一回事)

你必須意識到的是,所謂的寫端/命令端......已經爲你完成了。

帶有事務處理的XML文件的傳入批處理...每個事務都已經是一個事件。聽起來你不需要將這些事件轉換成事件,然後把它們放入卡夫卡。您可以將這些映射到您可以放入卡夫卡的內容中,然後所有主題的訂閱者都可以做相應的工作。

實際上,您將實施Event Sourcing + CQRS的讀取面。

實際上,除非你要在寫入側在做的事情(在XML文件生成/,其中接收用戶輸入)... 我不會太擔心的微妙之處與DDD和CQRS有關的事件採購的。我會只是想到你在做什麼,以將你的數據分發到多種服務

並且一定要考慮緩存,搜索引擎等只有在獲取這些XML文件時纔會更新。

0

如果這些xml文件中的每個單獨事件都有時間戳,那麼您可以將輸出到卡夫卡的內容視爲遲到事件的蒸汽。卡夫卡允許您將這些消息的事件時間設置爲事件的時間戳,而不是卡夫卡攝入的時間。這樣,任何下游處理應用程序(如Kafka Streams)都可以將事件置於正確的時間背景下,並聚合到適當的時間窗口或會話窗口中,甚至可以與其他實時輸入結合使用。