flink入門-流式計算概念

一、流式計算的世界觀

1.1 萬物皆流

只要時間不停萬事萬物都沒有靜止。我們所以為的靜態,不過是流中的一個片段。

意味著流的世界,不在乎所謂的狀態,在乎的是變化,也就是事件的發生,通過事件來表示。

1.2 升維

批量的時代,我們只記錄關鍵的信息,只在乎當前的狀態,不會去記錄狀態是如何一步步變化至當前狀態的,計算所面向的數據也是靜態的,從一個態的數據變化到另一個靜態的數據。

流的時代我們在乎的是變化,也就是一系列的事件,我們計算所面臨將是時時刻刻在更新流動的數據。

這完全就上升了一個維度,就像四維生物可以穿梭於時間之中。

1.3 流的時間觀念

時間對流來說是至關重要的,因為這關係事件與事件之間的順序關係,一旦錯亂便有可能導致計算出的當前狀態是錯誤的。時間讓事件有了秩序。

二、流式計算的實體

2.1 架構


flink入門-流式計算概念

數據源不斷產生數據形成流,通過計算生成新的流,不斷去更新目標數據源,實現結果數據的實時更新。

2.2 計算

流式計算和批量計算的算子無外乎都是那些數據的操作。區別就是批量面向的數據是一坨一坨打包好的,靜態的;流式面向的是流無限的數據。在分佈式環境中批量計算是將計算移動到相應的數據上進行運行,而流式計算是將定義好的計算部署到分佈式的節點上,讓數據在上面流動。


flink入門-流式計算概念

  • Map類:數據只依賴於當前這條數據。
  • agg:聚合操作
  • window:部分數據的聚到一起進行計算
  • join:不同的數據源通過相同的key進行融合
  • cep:例如,事件的模式匹配,例如給做了事件A之後做了事件B的用戶發生運營短信。
  • 其他

2.2 應用場景

1.低延時。比如實時的pv、uv。

2.實時ETL。例如行為數據join維表,近實時落入hdfs。

3.事件驅動場景。例如上面的cep。

三、流計算的難點

3.1 時間

第一部分說時間在流的世界觀中代表了事件的秩序,因為實時的環境會由於各種各樣的原因(比如網絡延時)導致事件到達計算節點的順序和發生的順序很可能是不一樣的。

3.2 有限的內存&無限的數據

流計算面臨的是源源不斷流入的數據,而如果還像批量計算那樣的操作方式來計算的化,很可能就會導致計算根本無法結束,或者隨著時間的推移需要保存的數據越來越多,導致內存爆掉。

3.3 longlive&錯誤恢復

因為數據是不斷產生的,所以需要計算是longlive的,一直存在。但時間長了出問題的概率大大增加,一旦掛掉,一些計算過程緩存的數據怎麼保存、怎麼恢復機會是個比較大的問題。

3.4 分佈式環境

分佈式環境下,共享數據實時同步,實現協同,這又是另一個故事了。

3.5 動態擴容

流是實時的,那數據的速率就是不穩定的,就像明星結婚啥的,會有突發的高峰,如何能實時適應這樣的突發。

四、總結

本文希望同學們能對流計算有個大概的瞭解,瞭解它的應用場景、架構、所面臨的難點。瞭解了這些接下來學習就有了方向。

https://www.toutiao.com/c/user/108314434662/#mid=1619075457860612


分享到:


相關文章: