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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...