1. 程式人生 > >說說實時流式計算

說說實時流式計算

六年前提起實時流式計算,熟悉的同學會想起Storm,三年前提起,大家應該會想到Spark Streaming,現在再提起那無疑是Flink了。可見開源世界技術的迭代是飛速的,稍不留神就落伍了,所以我們要不停地學習,跟著技術的浪潮上下翻滾,但是你學習的速度也無法總是跟得上技術的更替,所以年紀大了依舊可能被淘汰,前浪總是會拍打到沙灘上,“你有沒有這種感覺,好像一生都身不由己”。

好了先不思考人生了,言歸正傳。
我們先把 storm/spark/flink 這些花裡胡哨的技術都拋開,這些我之後的文章會詳細講,現在就說說實時流式計算本身。流式計算有什麼用呢?實際場景會告訴你:

1. 場景

流處理適用場景還是很豐富的,它最大的特點就是及時,試想一些,沒有下面的這些流式計算系統,公司會損失多少MONEY:

  • 需要實時異常檢測的欺詐/風控等系統
  • 需要實時檢視交易額的交易系統
  • 需要實時計算點選/計算分成的廣告系統
  • 需要實時更新使用者標籤的實時使用者畫像系統
  • 需要實時根據使用者喜好推薦商品的實時推薦系統

2. 時間

時間對於批計算來說好像沒有什麼特別的,就是一個欄位而已,但是流式計算裡,除了欄位裡的那個時間(專業點,我們稱這個時間為事件時間event-time)還有一個數據到達的時間及處理系統的當前時間(處理時間process-time)。

那問題來了,為什麼要管這個處理時間?因為資料會有延遲,你處理的時間批次裡,可能會有很久之前的資料延遲到了現在,也有可能現在的資料沒有及時到達導致缺數。

不知道看到這裡大家會不會想到大資料比較常用的Lambda架構,先提供時效性高準確性較低的結果,然後對之前的資料做矯正,保證最終正確性(當然前提條件是批處理作業啟動時,需要的資料應該已經全部到達了)。對於這個問題的解決辦法其實是和Lambda架構類似的,後面我會細說。

看上面的文字描述可能會有點抽象,我們先來看看下面這幅圖,橫軸為事件時間,縱軸為處理時間,圈起來的數字代表真實的資料,它們分別都有事件時間和處理時間,在兩者相同的理想情況下,就如同下面淺色的虛線是一條直線,這樣是最好處理的,但是實際情況卻是很曲折的,如深色的虛線,我們把虛線稱為水位線,水位線是根據一定演算法根據最近處理的事件的事件時間估算出來的,可以作為事件的觸發的一個參考項。

3. 視窗

上面提到了事件時間和處理時間,寫過SparkStreaming的同學應該知道它有一個處理時間的視窗,就是說可以對某個時間視窗內的資料進行聚合或者其他操作,但是這個時間視窗的時間是基於處理時間的,同樣會有上面提到的問題,資料延遲了怎麼辦?

那麼理所當然會有人提出基於事件時間的視窗,這個處理方式就是《Google:DataFlow》中提出來的,spark和flink後來都有了相應的工程實現。

4. 觸發

所謂觸發(Triggers)即時間視窗結束後對資料的處理方式。我們直接來看《DataFlow》中的幾種觸發機制。

  • 拋棄(discarding):
    觸發後,不會保留上次計算結果的資料,因為之後視窗計算的結果和之前的結果不存在相關性。當下遊的資料消費者(不管是資料處理管道的內部還是外部)希望觸發計算結果之間相互獨立(比如對插入的資料進行求和的場景),那麼這種情況就比較適用。
  • 累積(accumulating):
    觸發後,視窗內容被完整保留住持久化的狀態中, 後面延遲的結果會對之前的結果進行矯正。這也是Lambda架構使用的方式,流處理管道產出低延遲的結果,之後被批處理管道的結果覆蓋掉
  • 累計和撤回(retraction):
    觸發後,在進行累積語義的基礎上,計算結果的一份複製也被保留到持久化狀態中。當視窗將來再次觸發時,上一次的結果值先下發做撤回處理,然後新的結果作為正常資料下發。

撤回的操作適用於資料處理管道有多個序列的 GroupByKeyAndWindow 場景,撤回是必要的,因為同一個視窗的不同觸發計算結果可能在下游會被分組到不同鍵中去,這句話是關鍵,不知道大家有沒有理解,簡單地說就是,觸發時間的變化可能會導致這條延遲資料被分配到的組的變化,從而導致後續的聚合計算不準確,所以需要把之前的資料撤回,帶上這條資料一起再做一次GroupByKeyAndWindow。

5. 結語

這一篇提到的很多概念和名字很多同學可能一時會比較難消化,確實比較抽象,所以沒關係,後面講到flink的時候會舉具體的例子給大家看,這一篇只是和大家介紹下流式計算以及在流式計算中你需要重點關注的幾個點:時間/視窗/觸發,記住這三個詞也是一個收穫。

另外,大家有精力有時間有興趣的話,推薦大家好好看看Google在2015年釋出的一篇關於實時流式計算的論文,《The Dataflow Model》,這篇論文催生了spark的structed streaming以及給了當初默默無聞的flink成就現在輝煌的靈感。用詞好像有點浮誇了,但是它確實是在流式計算領域很有指導性意義的一篇論文。

覺得有價值請關注 ▼

相關推薦

Storm簡介——實時計算介紹

大數據 bsp 要求 角度 size 計算 spa 流量 使用場景 概念 實時流式計算: 大數據環境下,流式數據將作為一種新型的數據類型,這種數據具有連續性、無限性和瞬時性。是實時數據處理所面向的數據類型,對這種流式數據的實時計算就是實時流式計算。 特

說說實時計算

​ 六年前提起實時流式計算,熟悉的同學會想起Storm,三年前提起,大家應該會想到Spark Streaming,現在再提起那無疑是Flink了。可見開源世界技術的迭代是飛速的,稍不留神就落伍了,所以我們要不停地學習,跟著技術的浪潮上下翻滾,但是你學習的速度也無法總是跟得上技術的更替,所以年紀大了依舊可能被

什麼是實時計算

實時流式計算,也就是RealTime,Streaming,Analyse,在不同的領域有不同的定義,這裡我們說的是大資料領域的實時流式計算。 實時流式計算,或者是實時計算,流式計算,在大資料領域都是差不多的概念。那麼,到底什麼是實時流式計算呢? 谷歌大神Tyler Akidau在《the-world-be

實時計算系統中的幾個陷阱

![file](https://img2020.cnblogs.com/other/1089984/202005/1089984-20200508094546754-907266824.jpg) 隨著諸如Apache Flink,Apache Spark,Apache Storm之類的開源框架以及諸如Goog

hadoop(十三)storm計算實時處理)

storm介紹 說明+安裝文件             Storm是一個開源的分散式實時計算系統,可以簡單、可靠的處理大量的資料流。被稱作“實時的hadoop”。Storm有很多使用

storm 計算框架

大數據 storm 流式計算 一:storm 簡介 二:storm 的原理與架構 三:storm 的 安裝配置 四:storm 的啟動腳本 一: storm 的簡介: 1.1 storm 是什麽: 1. Storm是Twitter開源的分布式實時大數據處理框架,被業界稱為實時版Hadoo

計算簡介

1、資料的時效性 日常工作中,我們一般會先把資料儲存在一張表中,然後對這張表的資料進行加工、分析。那這裡是先儲存在表中,那就會涉及到時效性這個概念。 如果我們處理以年,月為單位的級別的資料處理,進行統計分析,個性化推薦,那麼資料的的最新日期離當前有幾個甚至上月都沒有問題。但是如果我們處理的是

大資料實時處理引擎比較

從流處理的核心概念,到功能的完備性,再到周邊的生態環境,全方位對比了目前比較熱門的流處理框架:Spark,Flink,Storm和 Gearpump。結合不同的框架的設計,為大家進行深入的剖析。與此同時,從吞吐量和延時兩個方面,對各個框架進行效能評估。 主要技術點:流失資料處理,Spark,

Flink 計算框架(學習一)

        開源流計算引擎,兼顧效能和可靠性。   Flink資料集型別         有邊資料集:最終不再發生改變         無邊資料集

計算基礎-1-1

  本文介紹:Storm是什麼 目標:          通過該課程的學習能夠了解離線計算與流式計算的區別、掌握Storm框架的基礎知識、瞭解流式計算的一般架構圖。 大綱: 離線計算是

計算基礎-2-2

  本文名稱:          Kafka技術增強          注:請先學習Kafka基礎

Spark Streaming 整合 SparkSQL處理計算

Spark Streaming之所以成為現在主流的流處理開發計算框架,不僅僅是因為它具有流處理和批處理的能力及支援離線和實時計算雙重特點,更重要的是Spark具有良好的生態,它不僅可以整合Hadoop生態的Hive,使用Hive on Spark進行離線分析,整合Yarn模式,使用Spark

【線上直播】Flink—新一代計算框架

分享講師:黃躍峰                                        

計算--實戰(日誌監控系統)

1.日誌監控系統           資料的流向:flume+kafka+storm+mysql     資料流程如下: 應用程式使用log4j產生日誌 部署flume客戶端監控應用程式產生的日誌資

計算形態下的大數據分析

信息 電子商務 新特性 少量數據 這一 mapreduce 適用於 right 日常 1 介 紹 1.1 流式計算介紹 流式大數據計算主要有以下特征: 1)實時性。流式大數據不僅是實時產生的,也是要求實時給出反饋結果。系統要有快速響應能力,在短時間內體現出數據的價值,

計算形態下的大資料分析

1 介 紹 1.1 流式計算介紹 流式大資料計算主要有以下特徵: 1)實時性。流式大資料不僅是實時產生的,也是要求實時給出反饋結果。系統要有快速響應能力,在短時間內體現出資料的價值,超過有效時間後資料的價值就會迅速降低。 2)突發性。資料的流入速率和順序並不確定,甚至會有較大的差異。這要求系統要有較高

spark streming計算一架構設計

      每一次分享文章都會糾結到底該從哪個地方開始講起,為了組織語言和文章引體會想很長時間。引體寫好後卻沒有了分享文章的慾望,最後就放棄了要寫一篇文章的想法。流式計算技術分享也是想了很久,好幾回編輯框都打開了最後還是放棄編寫了。今天,終於決定要寫一篇關於流式計算資料一致性

大資料學習:storm計算

       Storm是一個分散式的、高容錯的實時計算系統。Storm適用的場景:   1、Storm可以用來用來處理源源不斷的訊息,並將處理之後的結果儲存到持久化介質中。   2、由於Storm的處理元件都是分散式的,而且處理延遲都極低,所以可以Storm可以做為

計算--storm1(storm概念初識)

1.Storm是什麼?      Storm用來實時處理資料,特點:低延遲、高可用、分散式、可擴充套件、資料不丟失。提供簡單容易理解的介面,便於開發。 2.Storm與Hadoop的區別? Storm用於實時計算,Hadoop用於離線計算。 Storm處理的資料儲存在

計算--storm3(Storm單詞技術案例)

    功能說明:設計一個topology,來實現對文件裡面的單詞出現的頻率進行統計。本篇部落格是在storm概念講解和storm叢集搭建的基礎上來的   1.建立一個maven專案:         新增以來如下:  <dependency>