Streaming-大數據的未來

来源:https://www.cnblogs.com/tree1123/archive/2019/08/21/11389146.html
-Advertisement-
Play Games

分享一篇關於實時流式計算的經典文章,這篇文章名為Streaming 101: The world beyond batch 那麼流計算如何超越批處理呢? 從這幾個方面說明:實時流計算系統,數據處理模式,還有大數據的未來。 一、實時流式計算系統 實時流式計算的意義: 1、企業渴望獲得更及時的數據,實時 ...


分享一篇關於實時流式計算的經典文章,這篇文章名為Streaming 101: The world beyond batch

那麼流計算如何超越批處理呢?

從這幾個方面說明:實時流計算系統,數據處理模式,還有大數據的未來。

一、實時流式計算系統

實時流式計算的意義:

1、企業渴望獲得更及時的數據,實時計算系統延遲更低。

2、數據量越來越大,而實時計算系統理論上是處理無界數據的。

3、在數據到達時處理數據,可以更好的分擔負載,對於資源的消耗更容易預測。

什麼是Streaming?

有很多的定義,比如無界數據處理,近實時結果等,並不能說明Streaming的真正含義。Streaming應該是包含 無界數據 近實時 一致性 可重覆結果 等等特征的。 所以這裡給出Streaming的定義是:a type of data processing engine that is designed with infinite data sets in mind 一種考慮了無線數據集的數據處理引擎。

(這個定義包含了現在流行的真正的流式和微批)

Streaming常見的用法:

1、無限數據:一種不斷增長的,基本上無限的數據集。這些通常被稱為“流式數據”。無限的流式數據集可以稱為無界數據,相對而言有限的批量數據就是有界數據。

2、無界數據處理:一種持續的數據處理模式,應用於上面的無界數據。批量處理數據(離線計算)也可以重覆運行來處理數據,但是會有性能的瓶頸。

3、低延遲,近實時的結果:相對於離線計算而言,離線計算並沒有考慮延遲的問題。

Streaming的局限性:

Streaming長期以來一直和離線系統同時存在,也就是Lambda架構。

兩者都執行基本相同的計算,Streaming系統為您提供低延遲,不准確的結果,並且一段時間後批處理系統為您提供正確的輸出。(由Twitter的Nathan Marz(Storm的創造者)提出),這樣我們就需要維護兩個版本數據,最後再合併結果。

所以Kappa架構這種基於Kafka的可重覆獲取消息的架構出現了,Streaming應該是超越批量計算,並且能包含批量計算。Flink正是接受了這個觀點。

那麼怎麼做到這樣呢?只需要兩件事:

1、正確性:有了這個,就和批量計算等價了。

Streaming需要能隨著時間的推移依然能計算一定時間視窗的數據。Spark Streaming通過微批的思想解決了這個問題,實時與離線系統進行了一致性的存儲,這一點在未來的實時計算系統中都應該滿足。

2、推理時間的工具:這可以讓我們超越批量計算。

好的時間推理工具對於處理不同事件的無界無序數據至關重要。

這裡有兩種時間:事件時間和處理時間。

事件時間:事件實際發生的時間。

處理時間:系統中處理事件的時間。

當然,並不是所有的業務都會關心時間的問題。理想中事件時間和處理時間總是相等的,事件在發生時立即處理。然而,現實並非如此,事件時間和處理時間之間的偏差不僅不是零,而且受硬體(特別是網路),軟體,數據本身影響,會有很大的偏差。

file
圖一 時域映射 x軸為事件時間 y軸為處理時間 斜率為1的黑色虛線表示理想值,其中處理時間和事件時間完全相等; 紅線代表現實。理想線和紅線之間的水平距離是處理時間和事件時間之間的偏差。這種偏差本質上是處理流水線引入的延遲。

這個映射不是靜態的,所以只關心事件時間,就很難在時間視窗分析數據,而如果將事件時間視窗化,完整性會出問題。

所以必須用新的方案解決這個問題,我們先來看一下現有的數據處理模式。

二、數據處理模式

這裡我們將流式與微批處理放在一起,他們的差異在這裡並不重要。

1、有界數據

file

圖二,左側的數據集充滿了熵,我們通過mapreduce等批處理引擎,在右端使用具有更大內在價值的新結構化數據集。

當然,作為該方案的一部分,您可以實際計算的內容存在無限變化,但整體模型非常簡單。

2、無限數據-批量

批處理引擎雖然沒有明確考慮到無限數據,但是自從批量系統出現以來,它已被用於處理無界數據集。主要是將無界數據切割成適合批處理的有界數據集的集合。

固定視窗:

file
圖三 使用批處理引擎重覆運行來處理無界數據集的最常用方法是將輸入數據視窗化為固定大小的視窗,然後將每個視窗作為單獨的有界數據源處理。

會話:

file

圖四 增加批量,更複雜了

3、無限數據-Streaming

這種數據可能是 時間無序的 事件處理時間有偏差

在處理這種數據時有幾種情況:

不關心時間,近似演算法,處理時間視窗化,事件時間視窗化。

不關心時間

這種是完全不關心時間的情況,我們只需要完成對數據的處理就可以,有以下幾種情況:

過濾

比如web流量日誌,過濾掉某一個功能變數名稱的流量。丟棄不需要的就可以了。

file

圖五 過濾無界數據

內連接

還有就是連接兩個無界數據源的時候,沒有時間邏輯。

file

圖六 無界數據內連接

近似演算法

比圖top-N K-means等演算法,值得註意的是:這些演算法在設計中通常會有一些時間元素,並且由於它們在到達時處理

,因此該時間元素通常基於處理時間。這可能會影響計算的誤差,如果這些誤差範圍是以按順序到達的數據為基礎的

,那麼這種數據並不可信。

file

圖七 無界數據近似值

處理時間視窗化

先介紹一下視窗,有三種視窗模式

file

圖八 三種視窗

固定視窗:固定視窗將時間切割成具有固定大小時間長度的段。

滑動視窗:固定視窗的升級,滑動視窗由固定長度和固定周期定義。周期小於長度,則視窗重疊。如果周期等於長度,有固 定的視窗。如果周期大於長度,則會有一個的採樣視窗,它只會隨著時間的推移查看數據的子集。

會話:動態的視窗,會話由一系列事件組成,這些事件會超時而終止。會話通常用於通過將一系列與時間相關的事件組合在一起來分析用戶隨時間的行為。長度並不固定。

下麵先來討論處理時間視窗化:

當按處理時間視窗化時,系統基本上將輸入數據緩衝到一個視窗中,直到經過一定量的處理時間後再做處理。例如,在五分鐘固定視窗的情況下,系統會將數據緩衝五分鐘的處理時間,之後它會將這五分鐘內觀察到的所有數據視為一個視窗並將它們發送到下游進行處理。

file

圖九 處理時間視窗

處理時間視窗的優點:

簡單:不用擔心去改變數據。

視窗完整性:由於系統完全瞭解是否已經看到視窗的所有輸入,因此可以完美的判斷視窗完整。

處理時推斷源的信息:比如監控系統。

但是處理時間視窗有一個非常大的缺點:如果數據有和他們關聯的事件時間,弱國處理時間視窗要反映實際上這些事件的實際情況,那麼這些數據必須順序到達,但事實上大部分並不有序。

所以我們需要的是一種對時間到達順序更穩的方式,也就是事件時間視窗。

事件時間視窗化

將無界數據化為固定視窗。

file

圖10 將事件時間固定到固定視窗

圖中的實線白線表示兩個特別感興趣的數據。這兩個數據都到達處理時間視窗,這些時間視窗與它們所屬的事件時間視窗不匹配。因此,如果這些數據已被視窗化為處理關註事件時間的處理時間視窗,則計算結果將是不正確的。所以事件時間視窗才是正確性的體現。

file
圖11 也可以創建動態的視窗

事件時間視窗有兩個明顯的缺點,因為視窗必須更長。

緩衝:由於延長了視窗的生命周期,因此需要更多的數據緩衝。這個問題可以通過持久儲存和增量解決。

完整性:這個需要系統本身根據情況做出估計。

三、未來

我們定義了流的概念。正確性和推理時間的工具是關鍵。

通過分析事件時間和處理時間的差異,以及無界數據和有界數據,無界數據大致分為:不關心時間,近似演算法,處理時間視窗化,事件時間視窗化。

目前來看,時間問題可能是我們需要重點解決的問題,在102中介紹了一種實時流式處理模型,這也是未來實時計算領域的基石。

讓實時處理儘快融入到無限數據的系統中,為用戶提供高延遲,高效率間的靈活選擇,才是我們未來努力的方向。

更多實時計算,Kafka等相關技術博文,歡迎關註實時流式計算

file


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • sed 命令 作為行編輯器,對文件進行編輯(以行為單位進行編輯) sed編輯文件,卻不改變原文件 sed工作原理: 指定一個文本文件,依次讀取文本文件中的每行內容,讀取到模式空間中,在模式空間中進行匹配,對匹配後的內容進行修改 用法: -n 拒絕預設顯示 -r 指定用擴展的正則表達式 匹... ...
  • 環境:python3.7,pycharm,mysql ORM(Object Relational Mapper) 對象關係映射(ORM)是一種允許您使用面向對象的範例從資料庫查詢和操作數據的技術,sqlalchemy是實現ORM技術其中一個庫(框架)。 優勢 簡化開發,因為它可以自動執行對象到表和表 ...
  • ubuntu基於linux的免費開源桌面PC操作系統,十分契合英特爾的超極本定位,支持x86、64位和ppc架構。一個比較流行的Linux操作系統,不僅簡單易用,而且和Windows相容性非常好。那麼在ubuntu中如何安裝mysql資料庫呢? 在ubuntu安裝mysql主要有以下兩種方式: 1. ...
  • 跟單實例多少有點區別ORACLE 11g RAC 兩節點第一步 查看字元集PRIMARY-SYS@mydb2>select userenv('language') from dual; USERENV('LANGUAGE') AMERICAN_AMERICA.AL32UTF8/*也可以通過下麵幾種方 ...
  • [學習筆記] 1.2 PrintWriter的用法 PrintWriter和PrintStream類似,只不過PrintStream是針對位元組流的,而PrintWriter是針對字元流的。 例:1.2.1import java.io.*;public class TestMark_to_win { ...
  • Oracle使用cursor 游標迴圈添加刪除更新。 ...
  • 恢復內容開始 設計表的時候 1. 不同的表涉及同一個公共意義欄位不要使用不同的數據類型(可能導致索引不可用,查詢結果有偏差) 2. 不要一張表放太多的數據 主表20~30個欄位 其他表最好不超過20個 3. 最好不要有為Null的列,原因:https://mp.weixin.qq.com/s/U4R ...
  • 公司在Azure的Iaas虛擬機上部署有好幾台MySQL資料庫,至於沒有選擇Azure Database for MySQL,是因為預算有限(錢不夠啊!說多了也是淚,坑的還是DBA自己)。選擇了Iaas的話,DBA就必須考慮離線備份(offline backup),以預防災難性故障出現。我們選擇將歷... ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...