1

我們正在嘗試重新設計我們當前的數據管道,並考慮Streaming是否可以替代數據移動。 RDBMS事件涉及對現有數據以及歷史數據的INSERT,UPDATE和DELETE。所有這些事件都可以有唯一標識它們的鍵。正確性和完整性非常重要,而處理這些事件和延遲可能會在一定程度上被犧牲。即我們需要基於某些密鑰來處理微批處理中的事件,並且我們需要沒有更多關鍵事件(近似值,啓發式等都很好)。此外,這些事件並未訂購。即key1,key2數據可以一起到達。在某一時刻,key1的所有記錄都將到達,而在另一時刻,key2的所有數據都將到達。問題是如何以有意義的方式處理鍵控數據。再次完整性很重要。我們可以以增量累加結果,但直到我們擁有給定密鑰的完整數據時纔會有用。流媒體 - 如何逐步處理RDBMS更新並刪除事件

我可以想到的一種方式是使用no-sql存儲來使用主鍵作爲行鍵存儲此事件,並在no-sql存儲上執行冪等更新。但我認爲它也必須保持關鍵數據變化的狀態,並使其可供下游用戶使用,以便他們知道哪些數據發生了變化。他們現在可以從no-sql存儲讀取數據。但現在的問題是沒有-sql存儲是易變的,所以下游可能會處理不一致的數據。

另一種方法是不依賴no-sql,而是以某種方式從流中處理數據。我正在閱讀流處理的一些概念,如固定滑動窗口,會話窗口,水印。但我看不出有沒有解決這個問題。可能是我需要基於數據(鍵)的非對齊窗口和 來自發布者的某些信號表明每批事件的完成?

+0

您是否嘗試過任何流引擎,如@ apache-apex:http:// apex。 apache.org/? – daemon12

+0

我還沒有。看看火花流和谷歌數據流。我更新了我的問題來解釋用例。你知道apex已經實現了哪些特定的概念,可以幫助我的用例嗎? – nir

回答

0

我已經把這個項目放在一邊,但我經歷了一些關於谷歌數據流,火花流和apache束的文檔。 Storm和Apex在這一點上似乎太複雜了。

有像watermarkstriggers的概念,看起來很有希望告訴你,當窗口是完整的,當你應該開始處理。我可以繼續積累事件,直到我收到每個流的水印事件,告訴我開始處理。您可能需要更改您的數據源或這些事件的發佈者才能發送此「事件完成」事件。這可能只是難題的第一部分。一旦你有了自定義的事件窗口,那麼在開始處理或者更新/刪除數據存儲中的條目之前,你可能需要經過這些事件並從數據存儲(hbase,cassandra)中提取額外的數據;同樣,如果您有更多的下游用戶,那麼您必須向下遊傳達在該自定義窗口中完成的更改或上游處理,因爲您已經擁有該事件,所以對於任何下游可能不易訪問。您可能只需要這些事件的標準,以確定他們跨越多個消費者,像客戶ID,交易ID,時間期限等downstreamer。