1. 程式人生 > >[譯] Java 資料流的不同應用場景

[譯] Java 資料流的不同應用場景

資料流

資料流是一種資料分發技術,資料生產者將資料記錄寫入有序資料流,資料消費者可以從該資料流中以相同的順序讀取資料。這是一張用於說明資料生產者,資料流和資料消費者的簡單資料流圖:

資料生產者和消費者的資料流記錄

資料流可以有很多變數

從“表面”上看,資料流是一種很簡單的概念。資料生產者將記錄儲存到資料流中,隨後消費者可以從中讀取。不過,透過這層表面,我們可以看到還是存在一些細節操作會影響資料流系統的“外觀”,這會進而影響它的行為以及你可以進行的動作。

每個資料流產品都會對用例和處理技術做一定的假設(用於技術支援)。這些假設會導致某些設計選擇最後影響你可以用來實現資料流處理行為的型別。這個資料流教程將檢查哪些設計選擇,並基於這些設計選擇討論他們對使用者產品造成的影響。

資料流可以解耦生產者和消費者

資料流將資料生產者和資料消費者相互解耦。當資料生產者將其資料簡單寫入資料流時,生產者不需要知道讀取資料的消費者。消費者可以獨立於生產者進行新增和刪除。消費者可以在生產者不知情的情況下,啟動/停止或暫停並恢復他們的消費。這種解耦簡化了資料生產者和使用者的實現。

據流作為資料共享機制

資料流是在大型分散式系統中儲存和共享資料的一種非常有用的機制。如前所述,資料生產者只需將資料傳送至資料流系統。生產者不需要知道任何關於消費者的事情。消費者可以在不影響生產者的情況下,上線、下線、新增或者移除自己。

像 LinkedIn 這樣的大公司在內部廣泛使用資料流。Uber 也在內部使用資料流。許多企業級公司正在採用或已經採用內部資料流。許多初創公司也是如此。

持久化資料流

資料流是可以持久化的,在這種情況下,它被稱為 logjournal。持久化資料流的優點是資料流中的資料可以在資料流服務關閉後“存活”下來,因此資料記錄不會被丟失。

相比於在記憶體中儲存記錄的資料流服務相比,持久化資料流服務通常可以儲存更多的歷史資料。有些資料流儲存的歷史資料甚至可以追溯到寫入資料流的第一條記錄。有些只儲存部分歷史資料。

在持久化資料流儲存完整歷史記錄的情況下,消費者可以重複處理所有記錄,可以基於這些記錄重建它們的內部狀態。如果消費者在自己的程式碼中發現了 BUG,它就可以更正程式碼然後重現資料流來重建內部資料庫。

資料流用例

資料流是一個非常通用的概念,它可以用於支援多種不同的用例。在本節中,我將介紹一些更常用的資料流用例。

用於事件驅動架構的資料流

資料流常用於事件驅動架構。事件由事件生產者作為記錄寫入某些資料流系統, 事件消費者可以從中讀取這些事件。

用於智慧城市和物聯網的資料流

資料流也可以應用於傳輸在智慧城市周圍的感測器的資料,用於智慧工廠內感測器或者來自其他物聯網裝置感測器的流資料。像溫度,汙染程度等這樣的數值可以定期從裝置中取樣並寫入資料流。資料消費者可以在需要時從資料流中讀取樣本。

用於常規資料抽樣的資料流

智慧城市中感測器和物聯網裝置只是資料來源的兩個例子,這些資料來源可以定期取樣並通過資料流提供。還有許多其他型別的資料可以定期取樣並以流形式提供。例如,貨幣匯率或股票價格也可以抽樣和流傳輸。民意數值也可以定期取樣和流式傳輸。

用於資料點的資料流

在民調支援率的事例中,你可以決定每個獨立答案將要流向的民意投票流中,而不用流向定期抽樣的總數。由獨立資料點(如投票)組成總數有時會比計算總數來得更有意義。這取決於具體的用例和其他因素,例如單個數據點是匿名的還是包含不應該共享的私有的個人資訊。

記錄、訊息、事件和抽樣等。

資料流記錄有時被稱為訊息、事件、抽樣和其他術語。使用哪個術語取決於資料流的具體用例,以及生產者和消費者對資料的處理和響應方式。通常情況,從用例中可以比較清楚地知道用例引用記錄的具體意義。

值得注意的是,用例也會影響給定記錄所代表的內容。並非所有的資料記錄都是相同的。事件與抽象值不一樣,不能總是以相同的方式使用。在本教程(和/或者其他教程)中,我將更詳細地討論這一點。

如果發現譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可獲得相應獎勵積分。文章開頭的 本文永久連結 即為本文在 GitHub 上的 MarkDown 連結。


掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄