在工業(yè)界,當我們提到實時數(shù)據(jù)機器學習時,常??梢月牭饺缦掠懻摚?/p>
他們希望有一個模型,這個模型利用最近歷史信息來進行預測分析。舉一個天氣的例子,如果最近幾天都是晴天,那么未來幾天極小概率會出現(xiàn)雨雪和低溫天氣
這個模型還需要是可更新的。當數(shù)據(jù)流經(jīng)系統(tǒng)時,模型是可以隨之進化升級。舉個例子,隨著業(yè)務規(guī)模的擴大,我們希望零售銷售模型仍然保持準確。
實時機器學習應用是人工智能真正落地服務化的關(guān)鍵一步,因為工業(yè)界大部分場景下數(shù)據(jù)都是實時產(chǎn)生的。因此作為一名合格的人工智能領(lǐng)域?qū)<遥莆樟魇綀鼍跋碌?a href="http://www.brongaenegriffin.com/v/tag/2562/" target="_blank">算法設計必不可少。 本文主要介紹流式數(shù)據(jù)處理的使用場景、相關(guān)技術(shù),并從服務管理的角度,介紹了針對流式計算服務的設計及關(guān)鍵指標。主要面向希望了解流式計算、服務管理的朋友們。
流式計算的使用場景
01
首先,當前業(yè)界已經(jīng)有非常多數(shù)據(jù)處理的方式了,為什么還需要流式數(shù)據(jù)處理?要回答這個問題,我們先回顧一下傳統(tǒng)的的數(shù)據(jù)處理架構(gòu)。 傳統(tǒng)的數(shù)據(jù)處理架構(gòu)是一種典型的以數(shù)據(jù)庫為中心,適應存儲事務性數(shù)據(jù)處理的場景。由于數(shù)據(jù)處理能力優(yōu)先,在該架構(gòu)下,往往數(shù)據(jù)都是以批量的方式進行處理,例如:批量寫入數(shù)據(jù)庫、批量讀取數(shù)據(jù)庫進行數(shù)據(jù)處理。這種架構(gòu)在面對實時性較低的場景中較為有效,但是在對實時性較高的場景則不太有效,例如:自動駕駛場景、工業(yè)機器人場景、基于會話的用戶統(tǒng)計等。
因此,流式計算或流式數(shù)據(jù)處理被提出。其實流處理它最接近數(shù)據(jù)產(chǎn)生的自然規(guī)律,只不過過去我們沒有流處理能力,只能做一些特殊的處理才能真正地使用流數(shù)據(jù),比如將流數(shù)據(jù)攢成批量數(shù)據(jù)再處理,不然無法進行大規(guī)模的計算。使用流數(shù)據(jù)并不新鮮,新鮮的是我們有了新技術(shù),從而可以大規(guī)模、靈活、自然和低成本地使用它們。 流式處理的核心目標有以下三點:
低延遲:近實時的數(shù)據(jù)處理能力
高吞吐:能處理大批量的數(shù)據(jù)
可以容錯:在數(shù)據(jù)計算有誤的情況下,可容忍錯誤,且可更正錯誤
流式處理框架
02
典型的流處理框架結(jié)合了消息傳輸層技術(shù)以及流處理層技術(shù)。具體如圖所示:
消息傳輸層的引入流處理層提供了以下支持:
消息傳輸層的一個作用是作為流處理層上游的安全隊列,它相當于緩沖區(qū),可以將事件數(shù)據(jù)作為短期數(shù)據(jù)保留起來,以防數(shù)據(jù)處理過程發(fā)生中斷
具有持久性的好處之一是消息可以重播。實現(xiàn)時間穿梭
在當前典型的流處理技術(shù)中,有這么幾類:
Lambda架構(gòu)
基于Lambda架構(gòu),實現(xiàn)了離線計算的精確性的同時,且獲得了流式數(shù)據(jù)處理的實時性。但是,由于要開發(fā)同樣邏輯的代碼,開發(fā)、維護成本高
Kappa架構(gòu)為了解決lambda架構(gòu)中維護兩套同樣邏輯的代碼,kappa架構(gòu)提出使用流式處理解決上述問題。當需要重新處理、計算數(shù)據(jù)時,使用另一個流程處理的作業(yè)(可以是相同的、優(yōu)化的版本)進行數(shù)據(jù)處理。
spark streaming
基于小批量進行數(shù)據(jù)處理
Flink
以上幾種技術(shù)中,flink既可以實現(xiàn)低延遲、高吞吐,還可以實現(xiàn)容錯。
Flink概況
03
Flink技術(shù)除支持流處理外,還支持批處理,其架構(gòu)如下圖所示:
另外,F(xiàn)link具有分布式的特點,具體體現(xiàn)在它能夠在成百上千臺機器上運行,它將大型的計算任務分成許多小的部分,每個機器執(zhí)行一個部分。 Flink能夠自動地確保在發(fā)生機器故障或者其他錯誤時計算能持續(xù)進行,或者在修復bug或進行版本升級后有計劃地再執(zhí)行一次。這種能力使得開發(fā)人員不需要擔心失敗。 Flink本質(zhì)上使用容錯性數(shù)據(jù)流,這使得開發(fā)人員可以分析持續(xù)生成且永遠不結(jié)束的數(shù)據(jù)(即流處理)。因為不用再在編寫應用程序代碼時考慮如何解決問題,所以工程師的時間得以充分利用,整個團隊也因此受益。好處并不局限于縮短開發(fā)時間,隨著靈活性的增加,團隊整體的開發(fā)質(zhì)量得到了提高,運維工作也變得更容易、更高效。Flink讓應用程序在生產(chǎn)環(huán)境中獲得良好的性能。
總體來說,F(xiàn)link的主要特性:
符合產(chǎn)生數(shù)據(jù)的自然規(guī)律:支持流式數(shù)據(jù)處理
發(fā)生故障后仍保持準確:具體容錯機制(exactly once)
及時給出所需結(jié)果:低延遲、實時性強
時間概念
在流數(shù)據(jù)處理的體系中,時間是一個重要的概念??傮w來說,可分為以下三種時間:
事件時間:即事件實際發(fā)生的時間。更準確地說,每一個事件都有一個與它相關(guān)的時間戳,并且時間戳是數(shù)據(jù)記錄的一部分(比如手機或者服務器的記錄)。事件時間其實就是時間戳。處理時間,即事件被處理的時間。
處理時間:其實就是處理事件的機器所測量的時間
攝取時間:也叫作進入時間。它指的是事件進入流處理框架的時間
Flink允許用戶根據(jù)所需的語義和對準確性的要求選擇采用事件時間、處理時間或攝取時間定義窗口
窗口
窗口是一種機制,它用于將許多事件按照時間或者其他特征分組,從而將每一組作為整體進行分析(比如求和)
時間穿梭
流處理器支持事件時間,這意味著將數(shù)據(jù)流“倒帶”,用同一組數(shù)據(jù)重新運行同樣的程序,會得到相同的結(jié)果
水印
假設第一個窗口從1000開始(即從10時0分0秒開始),需要計算從1000到1000的數(shù)值總和。當時間就是記錄的一部分時,我們怎么知道1000已到呢?換句話說,我們怎么知道蓋有時間戳1059的元素還沒到呢?Flink通過水印來推進事件時間。水印是嵌在流中的常規(guī)記錄,計算程序通過水印獲知某個時間點已到。
有狀態(tài)的計算
流式計算分為無狀態(tài)和有狀態(tài)兩種情況:
無狀態(tài)的計算觀察每個獨立事件,并根據(jù)最后一個事件輸出結(jié)果。例如,流處理應用程序從傳感器接收溫度讀數(shù),并在溫度超過90度時發(fā)出警告。
有狀態(tài)的計算則會基于多個事件輸出結(jié)果。
數(shù)據(jù)處理容錯及一致性保障
在有狀態(tài)的數(shù)據(jù)處理中,如何保障數(shù)據(jù)的一致性是一個關(guān)鍵點。保障一致性的方式有以下三種:
at most once:這其實是沒有正確性保障的委婉說法——故障發(fā)生之后,計數(shù)結(jié)果可能丟失
at least once:這表示計數(shù)結(jié)果可能大于正確值,但絕不會小于正確值。也就是說,計數(shù)程序在發(fā)生故障后可能多算,但是絕不會少算
exactly once:這指的是系統(tǒng)保證在發(fā)生故障后得到的計數(shù)結(jié)果與正確值一致
Flink如何保證exactlyonce呢?它使用一種被稱為“檢查點”的特性,在出現(xiàn)故障時將系統(tǒng)重置回正確狀態(tài)。
有限流處理是無限流處理的一種特殊情況,它只不過在某個時間點停止而已。此外,如果計算結(jié)果不在執(zhí)行過程中連續(xù)生成,而僅在末尾處生成一次,那就是批處理(分批處理數(shù)據(jù))
原文標題:流式計算、數(shù)據(jù)處理及相關(guān)技術(shù)
文章出處:【微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責任編輯:haq
-
人工智能
+關(guān)注
關(guān)注
1806文章
49011瀏覽量
249331 -
機器學習
+關(guān)注
關(guān)注
66文章
8502瀏覽量
134584
原文標題:流式計算、數(shù)據(jù)處理及相關(guān)技術(shù)
文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
評論