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