什麼是流處理?

什麼是流處理?

 什麼是流處理?

  流處理是一種允許用戶在接收到的數據後的短時間內快速查詢連續數據流和檢測條件的技術。檢測時間從幾毫秒到幾分鐘不等。

  例如,通過流處理,您可以查詢來自溫度傳感器的數據流,並在溫度達到冰點時接收警報。

  它也被諸如實時分析,流式分析,複雜事件處理,實時流式分析和事件處理等名稱所調用。 儘管歷史上有些術語存在差異,但現在,工具已經在術語流處理下趨於一致。

  它是大數據技術之一。 它被Apache Storm推廣,現在有很多競爭者。

為什麼需要流處理?

  大數據確立了從處理數據中得出的洞察力的價值。這種洞察力的價值並不相等。一些洞察力在事情發生後不久就有了更高的價值,而且這種價值會隨著時間的推移而迅速減少。流處理針對這樣的場景。流處理的關鍵優勢在於它能夠更快地提供洞察力,通常在毫秒到秒之間。

  流處理作為Hadoop這樣的技術被引入和推廣,但是可以更快地給你結果。

  以下是使用流處理的一些次要原因。

  一些數據自然會成為一個永無止境的事件流。 要進行批處理,您需要存儲它,在某個時間停止數據收集,並處理數據。 然後,你必須做下一批,然後擔心跨多個批次的聚合。 相比之下,流處理方式自然而然地處理無數數據流。 您可以檢測模式,檢查結果,查看多個焦點級別,還可以同時輕鬆查看多個數據流中的數據。

  流處理自然適合時間序列數據和檢測模式隨時間推移。例如,如果您試圖在一個永無止境的流中檢測web會話的長度(這是嘗試檢測序列的一個例子),那麼使用批處理是非常困難的,因為有些會話將分為兩個批。流處理可以輕鬆地處理這一問題。如果你退一步想想,最連續的數據序列是時間序列數據。例如,幾乎所有物聯網數據都是時間序列數據。因此,使用自然適合的編程模型是有意義的。

  批處理讓數據建立起來並嘗試一次處理它們,而數據流處理則在數據進入時對其進行處理,從而隨著時間推移處理數據。 因此,流處理可以比批處理少硬件。 此外,流處理還可以通過系統減載實現近似的查詢處理。 因此,流處理自然適合用於近似回答充分的用例。

  有時候,數據是巨大的,甚至不可能存儲它。 流處理可讓您處理大型火馬式數據並僅保留有用位。

  最後,有大量流數據可用(例如,客戶交易,活動,網站訪問),並且隨著物聯網用例(所有類型的傳感器),它們的增長速度會更快。 流式傳輸是一種更加自然的模型,可以考慮並編寫這些用例。

  但是,流式傳輸也不是所有用例的工具。 一個很好的經驗法則是,如果處理需要通過完整數據的多次傳遞或具有隨機訪問(想象一個圖形數據集),那麼在流式傳輸中就很棘手。 流媒體中的一個大缺失用例是機器學習算法來訓練模型。 另一方面,如果處理可以通過一次數據處理完成,或者具有時間局部性(處理傾向於訪問最近的數據),那麼它非常適合流式傳輸。

如何進行流處理?

  如果你想構建一個處理流數據並作出實時決策的應用程序,你可以使用一個工具或自己構建它。 答案取決於您計劃處理多少複雜性,需要擴展多少,需要多少可靠性和容錯能力等。

  如果您想自己構建應用程序,請將事件置於消息代理主題(例如ActiveMQ,RabbitMQ或Kafka)中,編寫代碼以接收代理中主題的事件(它們將成為您的流),然後將結果發佈回經紀人。 這樣的代碼被稱為參與者。

  但是,您可以使用流處理器來節省時間,而不是從頭開始編寫上述場景。 事件流處理器可讓您為每個參與者編寫邏輯,連接參與者,並將邊緣連接到數據源。您可以直接將事件發送到流處理器,也可以通過代理發送它們。

  事件流處理器將為收集數據付出艱辛的努力,將其交付給每個參與者,確保它們以正確的順序運行,收集結果,如果負載很高則進行擴展並處理失敗。 其中的例子有Storm,Flink和Samza。 如果您想以這種方式構建應用程序,請查看相應的用戶指南。

  自2016年以來,出現了一個名為Streaming SQL的新概念。我們稱之為一種語言, 使用戶能夠編寫 sql (如查詢) 來查詢流式數據流 sql 語言。

  諸如WSO2 Stream Processor和SQLStreams之類的項目已經支持SQL五年多了。

  Apache Storm在2016年增加了對Streaming SQL的支持。

  Apache Flink在2016年增加了對Streaming SQL的支持。

  Apache Kafka在2017年加入了對SQL(他們稱為KSQL)的支持。

  Apache Samza在2017年增加了對SQL的支持。

  藉助流式SQL語言,開發人員可以快速將流式查詢合併到其應用程序中。 到2018年,大多數Stream處理器都支持通過Streaming SQL語言處理數據。

  讓我們瞭解SQL是如何映射到流的。流是移動中的表數據。想想一個永無止境的表,新的數據會隨著時間的推移而出現。流就是這樣一個表。流中的一個記錄或一行稱為事件。但是它有一個模式,其行為就像數據庫行一樣。為了理解這些想法,Tyler Akidau 在 Strata的演講是一個很好的資源。

  關於SQL流,首先要了解的是它用流替換表。

  當你編寫SQL查詢時,你可以查詢存儲在數據庫中的數據。 但是,當您編寫Streaming SQL查詢時,您可以將它們寫入現在的數據以及將來的數據。 因此,流SQL查詢永遠不會結束。 這不是問題嗎? 否:這是因為這些查詢的輸出是流。 一旦事件匹配並且輸出事件立即可用,事件將被放置在輸出流中。

  流表示可以通過邏輯通道傳輸的所有事件,並且它永遠不會結束。 例如,如果我們在鍋爐中安裝溫度傳感器,我們可以將傳感器的輸出表示為流。 但是,傳統的SQL攝取存儲在數據庫表中的數據,對其進行處理,並將它們寫入數據庫表。 相反,上述查詢會在數據流進入時產生一串數據,併產生一個數據流作為輸出。 例如,假設每十分鐘有一次鍋爐流中發生事件。 過濾器查詢將在事件與過濾器匹配時立即在結果流中生成事件。

  因此,您可以按照以下步驟構建您的應用。 通過直接發送或通過代理發送事件到流處理器。 然後,您可以使用Streaming SQL編寫應用程序的流式部分。 最後,將流處理器配置為對結果執行操作。 這可以通過在Stream Processor觸發時調用服務或將事件發佈到代理主題並聆聽該主題來完成。

  有許多流處理器可用。WSO2流處理器(WSO2 SP), 它可以從Kafka,HTTP請求和消息代理中獲取數據,並且可以使用Streaming SQL語言查詢數據流。 WSO2 SP是Apache許可下的開源代碼。 只有兩臺商品服務器,它可以提供高可用性,並且可以處理100K + TPS吞吐量。 它可以在Kafka之上擴展到數百萬TPS。

誰正在使用流處理?

  一般來說,流處理對於使用情況非常有用,我們可以檢測到問題並且我們有合理的響應來改進結果。 此外,它在數據驅動的組織中扮演著關鍵角色。

  以下是一些用例。

  算法交易,股市監控

  智能患者護理

  監控生產線

  供應鏈優化

  入侵,監視和欺詐檢測(例如Uber)

  大多數智能設備應用(例如智能汽車.....這個名單還在繼續)

  智能電網(例如,負載預測和異常值插件檢測參見智能電網,總計100K範圍內有40億次事件)

  地理圍欄,車輛和野生動物追蹤(例如倫敦TFL)

  運動分析:通過實時分析增強體育運動(這是我們在真正的足球比賽中所做的工作)

  上下文感知促銷和廣告

  計算機系統和網絡監控

  交通監控

  預測性維護

  地理空間數據處理

  我希望這是有用的。

更多閱讀





分享到:


相關文章: