數(shù)據(jù)處理
- 背景
最經(jīng)典的一個數(shù)據(jù)處理MODEL
問題:每次處理一個請求进统,大量請求來的時候不是很高效。
解決方案掂榔,批處理坟桅。
批處理的時候,可以批量并發(fā)拳昌,經(jīng)典模型就是MAP/REDUCE
帶來的問題是常摧, 你知道所有的數(shù)據(jù),你知道如何處理
但是很多新的應(yīng)用是新流進(jìn)來的數(shù)據(jù)鸵荠,不是歷史數(shù)據(jù)。不能看到數(shù)據(jù)的全貌伤极。這時就要引入一個概念STREAM COMPUTING蛹找。
BATCH VS STREAMING
BATCH 的角度是數(shù)據(jù)集是已知的。 STREAM 的角度 是INPUT 是動態(tài)變化的哨坪,源源不斷的庸疾。
BATCH角度理解STREAM,某一個時間范圍內(nèi)当编,那么STREAM的數(shù)據(jù)也是確定的届慈。所以可以理解為streaming = a series of batch
stream 可以被拆解為一個個小BATCH,用BATCH 去處理忿偷。(micro batch)
最經(jīng)典的是spark streaming
從STREAM 角度看BATCH金顿。BATCH 就是一個STREAMING JOB 在一個特定條件下終止。
如FLINK, HERON鲤桥。
所有的計算引擎都會自由的在BATCH 和 STREAM 做轉(zhuǎn)換揍拆,沒有很嚴(yán)格的界定。
這2個都是數(shù)據(jù)計算的實現(xiàn)茶凳。而本質(zhì)就是輸入是BOUNDED 還是 UNBOUNDED的區(qū)別嫂拴。
Batch
Batch天生就是用來處理BOUNED 數(shù)據(jù)。
如何用BATCH 去處理UNBOUNDED 數(shù)據(jù)集贮喧?
把無限的數(shù)據(jù)筒狠,去切分成一個個小窗口,然后再這個窗口里用BATCH計算去計算箱沦。
如何定義batches?
靜態(tài)時間窗口(Fixed Size)辩恼,
動態(tài)時間窗口(session)
活動的時長,連到網(wǎng)站饱普,做了一系列操作运挫,然后就不再動了。這樣就可以動態(tài)分片套耕,針對用戶的活躍時間產(chǎn)生的數(shù)據(jù)做計算谁帕。
Streaming
時間在STREAMING系統(tǒng)中很重要。數(shù)據(jù)是流動的方式進(jìn)來冯袍,那么會有2個時間匈挖,事件到達(dá)的時間碾牌,事件產(chǎn)生的時間。
事件時間(event time):比如你點擊網(wǎng)頁的一個事件的時間點儡循。
消化時間(ingestion time):消息被收集丟到計算任務(wù)的時間點舶吗。
處理時間(process time):被計算任務(wù)處理完的時間點。
一般對用戶有意義的時間是第一個和第三個择膝。
比如一個電子溫度計誓琼,發(fā)溫度,我們需要考慮事件時間肴捉。
有些業(yè)務(wù)和事件產(chǎn)生的時間沒關(guān)系腹侣,可以用處理時間。
Streaming 處理bounded
unboudned + termination( 只跑2小時齿穗,比如處理EVENT 一直到11點)
處理unbounded
跟時間無關(guān)的
filtering :如源源不斷的數(shù)據(jù)傲隶,瀏覽這個網(wǎng)頁的來自中國的IP是多少
projection : 把EVENT 抽取固定信息
transformation: 把時間的數(shù)據(jù),用數(shù)學(xué)函數(shù)轉(zhuǎn)換窃页。近似計算
top N窗口計算(看使用處理時間還是事件時間)
每個小時的點擊量
which time to use for windowing?
how to window?
用哪種WINDOW跺株,看用戶的需求。
固定窗口:
Process Time : 沒有DELAY脖卖, 不需要保存狀態(tài)
Event Time: event -> {seq-mp, event-time, val}
[1, 11:00, 10]
[2, 11: 01, 50]
[3, 11:02, 30]
[4, 10:55, 30]
時間可能亂序
Sum : emit result by processing time
11:00 :10
11:01 : 60
11:02 :90
11:05 : 120
Sum : emit result by event time
11:00 :10
11:01 : 60
11:02 :90
10:55 : 10:54+30
需要有10:54的狀態(tài)乒省,需要保存狀態(tài)