Flink場景分析與比較【事件驅動、數據分析、數據管道】


一.事件驅動

  提到事件驅動應用,首先講什么是事件驅動的應用程序?事件驅動的應用程序是有狀態的應用程序,它從一個或多個事件中提取事件,並通過觸發計算,狀態更新或外部操作來對傳入的事件做出反應。

  事件驅動的應用程序是傳統應用程序設計的發展,具有分離的計算和數據存儲層。在這種體系結構中,應用程序從遠程事務數據庫讀取數據並將數據持久化到遠程事務數據庫。相反,事件驅動的應用程序基於狀態流處理應用程序。在這種設計中,數據和計算位於同一位置,從而可以進行本地【內存或磁盤】的數據訪問。通過定期將檢查點寫入遠程持久化存儲來實現容錯。下圖描述了傳統應用程序結構和事件驅動的應用程序之間的區別。

  

  說白了,區別主要在一下兩點:

    1.程序與數據的位置

      傳統應用程序不要求程序和程序使用的數據位於相同的機器上,數據的位置對程序來說無關緊要【排除網絡傳輸】,而且一般數據在遠端。而事件驅動程序則要求數據本地性,這有利於數據的快速計算,特別對於大批量數據來說效果更加明顯。

    2.容錯

      傳統應用程序一般不依賴容錯機制,因處理邏輯鏈條較短且同一個程序內部並發較少,因此一般使用事務來限制數據異常。而事件驅動程序,需要7*24不間斷執行,且增量計算比較常見,因此使用容錯和檢查點就顯得尤為重要了。

  事件驅動的應用程序有哪些優勢?

    1.事件驅動的應用程序不是訪問遠程數據庫,而是在本地訪問去數據,從而在吞吐量和延遲方面都產生了更好的性能。

    2.遠程持久性存儲的定期檢查點可以異步和增量方式完成。因此,對事件處理的影響很小。

    3.在分層體系中,多個應用程序共享同一數據庫是很常見的。因此,需要協調數據庫的任何修改。而由於每個事件驅動的應用程序都只負責自己的數據,因此更改數據的表示形式或縮放應用程序需要較小的協調。

  Flink如何支持事件驅動的應用程序?

    1.事件驅動的應用程序的限制由流處理器處理時間和狀態的能力來定義。Flink的許多傑出功能都圍繞這些概念。其提供了一組豐富的狀態原語,可以通過一次精確的一致性保證來管理非常大的數據量【最多幾個TB】。

    2.Flink對事件時間的支持,高度可定制的窗口邏輯以及對時間的細粒度控制【通過ProcessFunction啟用高級業務邏輯的實現】提供了支持。

    3.Flink具有用於復雜事件處理【CEP】的庫,可檢測數據流中的模式。

    4.Flink對於事件驅動的應用程序的突出功能是保存點。保存點是一致的狀態映像,可用作兼容應用程序的起點。給定一個保存點,可以更新應用程序或調整其規模,或者可以啟動應用程序的多個版本進行A/B測試。

  什么是典型的事件驅動應用程序?

    1.欺詐識別

    2.異常檢測

    3.基於規則的警報

    4.業務流程監控

    5.Web應用程序【社交網絡】

二.數據分析

  什么是數據分析應用程序?

    1.分析工作從原始數據中提取信息和見解。傳統上,分析是作為批處理查詢或應用程序對已記錄事件的有限數據集執行的。為了將最新數據合並到分析結果中,必須將其添加到分析數據集中,然后重新運行查詢或應用程序。結果被寫入存儲系統或作為報告發出。

    2.借助完善的流處理引擎,還可以以實時方式執行分析。流查詢或應用程序不讀取有限的數據集,而是吸收實時事件流,並隨着事件的使用不斷產生和更新結果。結果要么寫入外部數據庫,要么保持內部狀態。儀表板應用程序可以從外部數據庫讀取最新結果,也可以直接查詢應用程序的內部狀態。

    Flink支持流以及批處理分析應用程序,如下圖所示:

    

  流分析應用程序的優點是什么?

    與批處理分析相比,連續六分析的優勢不限於消除了定期導入和查詢執行,因此從事件到洞察的延遲都大大降低。與批處理查詢相反,流查詢不必處理輸入數據中的人為邊界,后者由定期導入和輸入的有界性質引起的。

    另一方面是更簡單的應用程序體系結構。批處理分析管道由幾個獨立的組件組成,用於定期計划數據提取和查詢執行。可靠地操作這樣的管道並非易事,因為一個組件的故障會影響管道的后續步驟。相比之下,在像Flink這樣的復雜處理器上運行的流分析應用程序則包含了從數據提取到連續結果計算的所有步驟。因此,它可以依靠引擎的故障恢復機制。

  Flink如何支持數據分析應用程序?

    Flink為連續流以及批處理分析提供了很好的支持。具體來說,它具有符合ANS的SQL接口,具有用於批處理和流查詢的統一語義。無論是在記錄的事件的靜態數據集上還是在實時事件流上運行,SQL查詢都會計算相同的結果。對用戶定義函數的豐富支持確保可以在SQL查詢中執行自定義代碼。如果需要更多的自定義邏輯,則Flink的DataStream API或DataSet API可以提供更多的底層控制。此外,Flink的Gelly庫提供了用於批處理數據集上的大規模和高性能圖形分析的算法和構建。

  什么是典型的數據分析應用程序?

    1.電信網絡的質量監控

    2.移動應用中的產品更新分析和實驗評估

    3.臨時分析消費消費中的實時數據

    4.大規模圖分析

三.數據管道

  什么是數據管道?

    提取轉換加載【ETL】是在存儲系統之間轉換和移動數據的常用方法。通常,會定期觸發ETL作業,以將數據從事務數據庫系統復制到分析數據庫或數據倉庫。數據管道的用途和ETL作業類似。它們可以轉換和豐富數據,並且可以將其從一個存儲系統轉移到另一個存儲系統。但是,它們以連續模式運行,不是定期觸發。因此,它們能夠從連續產生數據的源中讀取記錄,並以低延遲將其移動到目的地。例如,數據管道可能會監視文件系統目錄中是否有新文件,並將其數據寫入事件日志。另一個應用程序可以將事件流具體化到數據庫中,或者以增量方式構建和完善搜索索引。

    下圖描述了定期ETL作業和連續數據管道之間的區別:

    

  數據管道的優勢是什么?

    與周期性ETL作業相比,連續數據管道的明顯優勢是減少了將數據移至其目的地的等待時間。此外,數據管道更通用,可以用於更多用例,因為它們能夠連續使用和發出數據。

  Flink如何支持數據管道?

    Flink的SQL接口【或Table API】及其對用戶定義函數的支持可以解決許多常見的數據轉換或擴充任務。使用更通用的DataStream API可以實現具有更高級要求的數據管道。Flink為各種存儲系統【例如Kafka、Kinesis、Elasticsearch和JDBC數據庫系統】提供了豐富的連接器集。它還具有用於文件系統的連續源,這些源監視目錄和接收器以時間存儲方式寫入文件。

  什么是典型的數據管道應用程序?

    1.電子商務中的實時搜索索引構建

    2.電子商務中的持續ETL

四.典型案例

  1.搜索引擎                              2.流計算         3.特征提取和ETL   

 

          

 

  4.雲計算        5.實時流處理      6.互聯網

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM