Streaming 101

1. 為什么要流式計(jì)算

  • 業(yè)務(wù)需求:業(yè)務(wù)需要更及時(shí)計(jì)算結(jié)果,而流數(shù)據(jù)處理可以獲得更低的延時(shí)
  • 數(shù)據(jù)特點(diǎn):海量的無邊界數(shù)據(jù)在現(xiàn)代企業(yè)中越來越普遍,而流數(shù)據(jù)處理系統(tǒng)就是為此而生的
  • 硬件資源:流數(shù)據(jù)處理可以在時(shí)間維度上進(jìn)行負(fù)載均衡,同時(shí)也使得資源消耗更具有一致性和可預(yù)測(cè)性

2. 什么是流式計(jì)算

  • 誤解:近似或推到計(jì)算、低延遲。
  • 設(shè)計(jì)良好的流式系統(tǒng)具備的能力:正確性、一致性、可重復(fù)結(jié)果。

3. 術(shù)語

  • Streaming System
    一種處理無界數(shù)據(jù)的計(jì)算引擎
  • 數(shù)據(jù)集的定義形態(tài):Cardinality(基數(shù))和Constitution(組成)
    a. 基數(shù)
  • 有界數(shù)據(jù)
    一種大小確定的數(shù)據(jù)集
  • 無界數(shù)據(jù)
    一種大小是不確定的數(shù)據(jù)集(至少理論上是無限的)
    b. 組成
  • Table(表)
    數(shù)據(jù)集在某個(gè)特定時(shí)間點(diǎn)的整體視圖。SQL一般就是用于處理表。
  • Stream(流)
    指在隨時(shí)間演變的數(shù)據(jù)集的一個(gè)接著一個(gè)的元素視圖。

4. 被夸大的Streaming限制

  • Lambda架構(gòu),本文觀點(diǎn)就是你執(zhí)行一個(gè)流式系統(tǒng)的同事還有一個(gè)批處理系統(tǒng),兩者都使用一樣的計(jì)算方式。其中流式系統(tǒng)提供了低延遲、非準(zhǔn)確的結(jié)果(可能是因?yàn)槭褂昧私朴?jì)算,或者流式系統(tǒng)本身就不提供正確性),然后一段時(shí)間后批處理系統(tǒng)逐步的提供準(zhǔn)確的輸出。維護(hù)一個(gè)Lambda架構(gòu)非常復(fù)雜。你需要構(gòu)建、規(guī)定以及維護(hù)兩個(gè)獨(dú)立版本的數(shù)據(jù)管道并且知道怎么最終合并兩個(gè)數(shù)據(jù)管道的結(jié)果。
  • 一個(gè)設(shè)計(jì)良好的流式系統(tǒng)實(shí)際上在功能上是批處理的一個(gè)超集。例如并且Apache Flink認(rèn)真吸取了這一想法并且構(gòu)建了一個(gè)即使在“批處理”模式下也是完全流式的系統(tǒng)。
  • 批處理和流式處理的效率差異:批處理的高延遲、高效率,得益于增加了打包以及更有效的shuffle傳輸。流式處理低延遲、低吞吐。將處理無界數(shù)據(jù)納入到批系統(tǒng)設(shè)計(jì)中。Google Dataflow(Beam)模型提供了在相同的統(tǒng)一模型下的批處理和流式處理兩種運(yùn)行方式,將兩者好的地方予以保留而又不失選擇適當(dāng)效率級(jí)別的靈活性。
  • 替換掉批處理所需要的兩件事情
    a. Correctness(正確性)
    具備這點(diǎn)可持平批處理。核心在于,正確性問題可以歸結(jié)為一致性的存儲(chǔ)。流式系統(tǒng)需要一種能將持久化狀態(tài)的快照化的方法。強(qiáng)一致性是有且只有一次正確處理的必備條件,同時(shí)強(qiáng)一致也是對(duì)于任一系統(tǒng)來說能與批處理系統(tǒng)齊平或者超越批處理的必要條件。
    b. Tools for reasoning about time(時(shí)間推理工具)
    具備這點(diǎn)可超過批處理。針對(duì)無界無序數(shù)據(jù)的可變事件時(shí)間數(shù)據(jù),批系統(tǒng)和流式系統(tǒng)中對(duì)于處理有界和無界數(shù)據(jù)的共通方法,

5. 事件時(shí)間VS處理時(shí)間:事件時(shí)間和處理時(shí)間關(guān)系的兩個(gè)特點(diǎn)。

處理時(shí)滯:也就是處理時(shí)間一定比事件事件晚
事件時(shí)間偏差:處理時(shí)間-事件時(shí)間的時(shí)間差,并不固定。


事件時(shí)間與處理時(shí)間

6. 數(shù)據(jù)處理模式

  • 有界數(shù)據(jù)


    image.png
  • 無界數(shù)據(jù):批
    傳統(tǒng)的批處理引擎,通過切片的方式,將無界數(shù)據(jù)流,切分成一個(gè)個(gè)有界數(shù)據(jù)集,再進(jìn)行計(jì)算。
固定窗口(FIXED)
固定窗口(FIXED)

必須有機(jī)制能夠使這些遲到的數(shù)據(jù)重新計(jì)算,才能保證結(jié)果的正確性。

會(huì)話(SESSION)
會(huì)話

在批處理中,每個(gè)窗口的數(shù)據(jù),可能分布在兩個(gè)小批中。如下圖紅色區(qū)域所示??梢酝ㄟ^增大每批數(shù)據(jù)條數(shù),來減少被階段的會(huì)話窗口,但是會(huì)增加延時(shí)。當(dāng)然也可以在分批的時(shí)候,把同一會(huì)話窗口的數(shù)據(jù)都分在一批,但這會(huì)大大增加系統(tǒng)設(shè)計(jì)的復(fù)雜度。

  • 無界數(shù)據(jù):流
    真實(shí)數(shù)據(jù)有兩個(gè)特點(diǎn):高度無序性、處理時(shí)間和事件時(shí)間偏差不定。
    可分為4類方法處理處理:時(shí)間無關(guān)、近似計(jì)算、處理時(shí)間窗口、事件時(shí)間窗口
    a. 時(shí)間無關(guān): 例如Filter、Inner Joins

過濾(Filter)


過濾(Filter)

內(nèi)關(guān)聯(lián)(Inner Joins)


內(nèi)關(guān)聯(lián)(Inner Joins)

當(dāng)兩條流做內(nèi)關(guān)聯(lián)時(shí),需要把兩條流的數(shù)據(jù)都持久化到狀態(tài)中。當(dāng)兩邊的數(shù)據(jù)join上時(shí),就輸出。當(dāng)然這種方式要考慮數(shù)據(jù)buffer大小的問題,一般都會(huì)按時(shí)間來配數(shù)據(jù)過期策略。所以會(huì)存在數(shù)據(jù)完整性問題。

b. 近似算法
比如近似TopN算法流式、K-means算法]。通過近似算法對(duì)無界數(shù)據(jù)進(jìn)行計(jì)算,性能很好,但是可擴(kuò)展性差,因?yàn)樗惴ǘ继珡?fù)雜了。這些算法中通常都基于處理時(shí)間,所以無法應(yīng)對(duì)基于事件時(shí)間處理的需求?;谶@個(gè)原因,其實(shí)近似算法是另一種形式的時(shí)間無關(guān)型操作。


image.png

窗口

其余兩種流計(jì)算中常用的處理無界數(shù)據(jù)的方式,都是窗口的變體。簡(jiǎn)單來說,窗口是獲得(有界或無界)數(shù)據(jù)源的概念,窗口將數(shù)據(jù)源沿著時(shí)間邊界,切分成有界的數(shù)據(jù)塊,然后對(duì)各個(gè)數(shù)據(jù)塊進(jìn)行處理。下圖表示了三種窗口類型:

窗口
  • 固定窗口(Fixed Window)又稱為滾窗(Tumbling Window)
    固定窗口在時(shí)間維度上,按照固定長(zhǎng)度將無界數(shù)據(jù)流切片,是一種對(duì)齊窗口。
  • 滑動(dòng)窗口(Sliding Window)又稱為Hop Window,是固定窗口的推廣。由窗口長(zhǎng)度和窗口間隔兩個(gè)參數(shù)確定。如果窗口長(zhǎng)度小于窗口間隔,那么兩個(gè)窗口會(huì)重合,如上圖中Sliding Window所示。如果窗口長(zhǎng)度等于窗口間隔,那么就是固定窗口。如果窗口長(zhǎng)度小雨窗口間隔,那么就會(huì)是一個(gè)比較奇怪的采樣窗口,也就是僅對(duì)數(shù)據(jù)集的某些數(shù)據(jù)做窗口。
  • 會(huì)話窗口(Session):是一種動(dòng)態(tài)窗口。會(huì)話窗口由一系列事件序列組成,兩個(gè)會(huì)話窗口之間由沒有任何事件的一段時(shí)間間隔。比如,某個(gè)用戶1分鐘內(nèi)連續(xù)來了多次用戶點(diǎn)擊事件,等了3分鐘,又來了幾個(gè)連續(xù)的點(diǎn)擊事件,則每次連續(xù)的點(diǎn)擊事件,都是一個(gè)會(huì)話窗口。兩個(gè)會(huì)話窗口的間隔是3分鐘。會(huì)話窗口通常通過將一系列臨時(shí)相關(guān)的事件聚合,來分析用戶行為。每個(gè)會(huì)話窗口的大小都是不固定的,窗口間的間隔也是不固定的。是一種非常典型的非對(duì)齊窗口。

c. 處理時(shí)間窗口


處理時(shí)間窗口
  • 使用和理解都非常簡(jiǎn)單。
  • 能直觀判斷窗口是否結(jié)束。

d. 事件時(shí)間窗口


Fixed

Seesion
  • 只有基于事件時(shí)間進(jìn)行計(jì)算,才能保證數(shù)據(jù)的正確性。
  • 需要做數(shù)據(jù)shuffle將其放入正確的窗口中。
  • 有力的語義少有不需付出代價(jià)的,事件時(shí)間窗口也不例外。事件時(shí)間窗口有兩個(gè)顯著的弱點(diǎn)。
    * 緩存:事件時(shí)間窗口需要存儲(chǔ)更長(zhǎng)時(shí)間內(nèi)的數(shù)據(jù)。幸運(yùn)的是存儲(chǔ)很便宜,將持久化狀態(tài)存入存儲(chǔ)中,另外類似求和、求平均這樣的聚合操作可以進(jìn)行增量計(jì)算,不需要存儲(chǔ)所有的數(shù)據(jù)
    * 完整性:基于事件時(shí)間的窗口,我們也不能判斷什么時(shí)候窗口的數(shù)據(jù)都到齊了。很多系統(tǒng)使用Watermark來推斷相對(duì)精確的窗口結(jié)束時(shí)間。但是這種方式并不能得到完全正確的結(jié)果。因此,解決這個(gè)問題的更好的方式,應(yīng)該是讓用戶能定義何時(shí)輸出窗口結(jié)果,并且定義當(dāng)遲到數(shù)據(jù)到來時(shí),如何更新之前窗口計(jì)算的結(jié)果。

7. 總結(jié)

本文主要討論了幾個(gè)問題:

  • 澄清了一些術(shù)語的定義,專注于‘流’的定義,而不是已有流計(jì)算系統(tǒng)的實(shí)現(xiàn)
  • 研究了目前批/流系統(tǒng)的能力,強(qiáng)調(diào),在功能上,流是批的超集。
  • 提出了如果流系統(tǒng)在功能上要超越批系統(tǒng),需要具備的兩個(gè)能力,分別是:正確性和在各時(shí)間域處理數(shù)據(jù)的能力。
  • 強(qiáng)調(diào)了事件時(shí)間和處理時(shí)間的巨大區(qū)別。提出了基于這兩個(gè)時(shí)間處理數(shù)據(jù)的難點(diǎn)。
  • 調(diào)查了主流數(shù)據(jù)處理系統(tǒng)處理有界和無界數(shù)據(jù)的方式。將無界數(shù)據(jù)處理分為四類:時(shí)間無關(guān),近似估計(jì),基于處理時(shí)間的窗口和基于事件時(shí)間的窗口
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 近年來,在大數(shù)據(jù)場(chǎng)景下,流式的數(shù)據(jù)處理因其自身的原因已經(jīng)變得愈發(fā)重要。主要以下幾點(diǎn)原因: 1. 業(yè)務(wù)極度渴望獲取更...
    哲學(xué)家之死閱讀 378評(píng)論 0 2
  • 前言 今天流式數(shù)據(jù)處理在大數(shù)據(jù)領(lǐng)域是一件大事,理由如下: 1、企業(yè)渴望更加及時(shí)的數(shù)據(jù),而且采用流式處理是降低延遲的...
    雨釣Moowei閱讀 1,067評(píng)論 0 1
  • 花了一天時(shí)間才看完了Tyler Akidau寫的兩篇關(guān)于流處理的文章,一是我英語一般,二是他用的詞我也覺得比較生,...
    Bitson閱讀 730評(píng)論 0 0
  • 本篇是《Streaming Systems》第一章的總結(jié)輸出。 在大數(shù)據(jù)領(lǐng)域,最近幾年 Streaming dat...
    柳年思水閱讀 2,332評(píng)論 0 4
  • Structured Streaming 編程指南 概述 快速示例 Programming Model (編程模型...
    Joyyx閱讀 2,503評(píng)論 0 4

友情鏈接更多精彩內(nèi)容