Flink入門(一)——Apache Flink介紹

来源:https://www.cnblogs.com/tree1123/archive/2019/11/18/11880563.html
-Advertisement-
Play Games

Apache Flink是什麼? ​ 在當代數據量激增的時代,各種業務場景都有大量的業務數據產生,對於這些不斷產生的數據應該如何進行有效的處理,成為當下大多數公司所面臨的問題。隨著雅虎對hadoop的開源,越來越多的大數據處理技術開始涌入人們的視線,例如目前比較流行的大數據處理引擎Apache Sp ...


file

Apache Flink是什麼?

​ 在當代數據量激增的時代,各種業務場景都有大量的業務數據產生,對於這些不斷產生的數據應該如何進行有效的處理,成為當下大多數公司所面臨的問題。隨著雅虎對hadoop的開源,越來越多的大數據處理技術開始涌入人們的視線,例如目前比較流行的大數據處理引擎Apache Spark,基本上已經取代了MapReduce成為當前大數據處理的標準。但是隨著數據的不斷增長,新技術的不斷發展,人們逐漸意識到對實時數據處理的重要性。相對於傳統的數據處理模式,流式數據處理有著更高的處理效率和成本控制能力。Flink 就是近年來在開源社區不斷發展的技術中的能夠同時支持高吞吐、低延遲、高性能的分散式處理框架。

file

數據架構的演變

file

如圖所示,傳統的單體數據架構最大的特點便是 集中式數據存儲,大多數將架構分為計算層和存儲層。

單體架構的初期效率很高,但是隨著時間的推移,業務越來越多,系統逐漸變得很大,越來越難以維護和升級,資料庫是唯一的準確數據源,每個應用都需要訪問資料庫來獲取對應的數據,如果資料庫發生改變或者出現問題,則將對整個業務系統產生影響。

後來隨著微服務架構的出現,企業開始採用微服務作為企業業務系統的架構體系。微服務架構的核心思想是:一個應用是由多個小的、相互獨立的微服務組成,這些服務運行在自己的進程中,開發和發佈都沒有依賴。不同的服務能依據不同的業務需求,構建的不同的技術架構之上,能夠聚焦在有限的業務功能。 如圖

file

微服務架構

起初數據倉庫主要還是構建在關係型資料庫之上。例如Oracle、Mysql等資料庫,但是隨著企業數據量的增長,關係型資料庫已經無法支撐大規模數據集的存儲和分析,因為越來越多的企業開始選擇基於Hadoop構建企業級大數據平臺。同時眾多的Sql_on_hadhoop上構建不同類型的數據應用變得簡單而高效。

在構建企業數據倉庫的過程中,數據往往都是周期性的從業務系統中同步到大數據平臺,完成一系列的ETL轉換動作之後,最終形成了數據集市等應用。但是對於一些時間要求比較高的應用,例如實時報表統計,則必須有非常低的延時展示統計結果,為此業界提出了一套Lambda架構方案來處理不同類型的數據。

file

大數據lambada架構

大數據平臺中包含批量計算的Batch Layer和實時計算的Speed Layer,通過在一套平臺中將批計算和流計算整合在一起,例如使用Hadoop MapReduce進行批量數據的處理,使用Apache Storm進行實時數據的處理。這種架構在一定程度上解決了不同計算類型的問題,但是帶來的問題是框架太多會導致平臺複雜度過高、運維成本高等。在一套資源管理平臺中管理不同類型的計算框架使用也是非常困難的事情。

後來隨著Apache Spark的分散式記憶體處理框架的出現,提出了將數據切分成微批的處理模式進行流式數據處理,從而能夠在一套計算框架內完成批量計算和流式計算。但因為Spark本身是基於批處理模式的原因,並不能完美且高效的處理原生的數據流,因此對流式計算支持的相對較弱,可以說Spark的出現本質上是在一定程度上對Hadoop架構進行了一定的升級和優化。

有狀態流計算架構

數據產生的本質,其實是一條條真實存在的事件,前面提到的不同的架構其實都是在一定程度違背了這種本質,需要通過在一定時延的情況下對業務數據進行處理,然後得到基於業務數據統計的準確結果。實際上,基於流式計算技術局限性,我們很難再數據產生的過程中進行計算並直接產生統計結果,因為這不僅對系統有非常高的要求,還必須要滿足高性能、高吞吐、低延時等眾多目標。

file
基於有狀態計算的方式最大的優勢是不需要將原始數據重新從外部存儲中拿出來,從而進行全量計算,因為這種計算方式的代價可能是非常高的。

Flink通過實現Google Dataflow流式計算模型實現了高吞吐、低延遲、高性能兼具實時流式計算框架。同時Flink支持高度容錯的狀態管理,防止狀態在計算過程中因為系統異常而出現丟失,Flink周期性地通過分散式快照技術Checkpoints實現狀態的持久化維護,使得即使在系統停機或者異常的情況下都能計算出正確的結果。

Flink的具體優勢有以下幾點:

  1. 同時支持高吞吐、低延遲、高性能
    Flink是目前開源社區中唯一一套集高吞吐、低延遲、高性能三者於一身的分散式流式數據處理框架。像Apache Spark也只能兼顧高吞吐和高性能特性,主要因為在Spark Streaming流式計算中無法做到低延遲保障;而流式計算框架Apache Storm只能支持低延遲和高性能特性,但是無法滿足高吞吐的要求。而滿足高吞吐、低延遲、高性能這三個目標對分散式流式計算框架來說是非常重要的。

  2. 支持事件時間(Event Time)概念
    在流式計算領域中,視窗計算的地位舉足輕重,但目前大多數框架視窗計算採用的都是系統時間(Process Time),也是事件傳輸到計算框架處理時,系統主機的當前時間。Flink能夠支持基於事件時間(Event Time)語義進行視窗計算,也就是使用事件產生的時間,這種基於事件驅動的機制使得事件即使亂序到達,流系統也能夠計算出精確的結果,保持了事件原本產生時的時序性,儘可能避免網路傳輸或硬體系統的影響。

  3. 支持有狀態計算
    Flink在1.4版本中實現了狀態管理,所謂狀態就是在流式計算過程中將運算元的中間結果數據保存在記憶體或者文件系統中,等下一個事件進入運算元後可以從之前的狀態中獲取中間結果中計算當前的結果,從而無須每次都基於全部的原始數據來統計結果,這種方式極大地提升了系統的性能,並降低了數據計算過程的資源消耗。對於數據量大且運算邏輯非常複雜的流式計算場景,有狀態計算發揮了非常重要的作用。

  4. 支持高度靈活的視窗(windows)操作

    在流處理應用中,數據是連續不斷的,需要通過視窗的方式對流數據進行一定範圍的聚合計算,例如統計在過去的1分鐘內有多少用戶點擊某一網頁,在這種情況下,我們必須定義一個視窗,用來收集最近一分鐘內的數據,並對這個視窗內的數據進行再計算。Flink將視窗劃分為基於Time、Count、Session,以及Data-driven等類型的視窗操作,視窗可以用靈活的觸發條件定製化來達到對複雜的流傳輸模式的支持,用戶可以定義不同的視窗觸發機制來滿足不同的需求。

  5. 基於輕量級分散式快照(Snapshot)實現的容錯
    Flink能夠分散式運行在上千個節點上,將一個大型計算任務的流程拆解成小的計算過程,然後將tesk分佈到並行節點上進行處理。在任務執行過程中,能夠自動發現事件處理過程中的錯誤而導致數據不一致的問題,比如:節點宕機、網路傳輸問題,或是由於用戶因為升級或修複問題而導致計算服務重啟等。在這些情況下,通過基於分散式快照技術的Checkpoints,將執行過程中的狀態信息進行持久化存儲,一旦任務出現異常停止,Flink就能夠從Checkpoints中進行任務的自動恢復,以確保數據在處理過程中的一致性。

  6. 基於JVM實現獨立的記憶體管理
    記憶體管理是所有計算框架需要重點考慮的部分,尤其對於計算量比較大的計算場景,數據在記憶體中該如何進行管理顯得至關重要。針對記憶體管理,Flink實現了自身管理記憶體的機制,儘可能減少JVM GC對系統的影響。另外,Flink通過序列化/反序列化方法將所有的數據對象轉換成二進位在記憶體中存儲,降低數據存儲的大小的同時,能夠更加有效地對記憶體空間進行利用,降低GC帶來的性能下降或任務異常的風險,因此Flink較其他分散式處理的框架會顯得更加穩定,不會因為JVM GC等問題而影響整個應用的運行。

  7. Save Points(保存點)
    對於7*24小時運行的流式應用,數據源源不斷地接入,在一段時間內應用的終止有可能導致數據的丟失或者計算結果的不准確,例如進行集群版本的升級、停機運維操作等操作。值得一提的是,Flink通過Save Points技術將任務執行的快照保存在存儲介質上,當任務重啟的時候可以直接從事先保存的Save Points恢複原有的計算狀態,使得任務繼續按照停機之前的狀態運行,Save Points技術可以讓用戶更好地管理和運維實時流式應用。

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

file

本文由博客一文多發平臺 OpenWrite 發佈!


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

-Advertisement-
Play Games
更多相關文章
  • https://blog.csdn.net/vivianXuejun/article/details/78809655 https://www.bt.cn/bbs/forum.php?mod=viewthread&tid=20728 ...
  • mssql資料庫的主鍵約束中,主鍵名查詢: 修改主鍵名稱的方法: ...
  • 【關閉集群順序】1.使用crs_stat 命令查詢RAC節點的服務狀態是否正常[grid@ora01sh ~]$ crs_stat -t -v2.使用srvctl (service control)命令依次關閉集群服務關閉順序:關閉資料庫(實例)-->關閉ASM實例-->關閉節點服務1)關閉資料庫[ ...
  • Redis 是一款比較常用的 NoSQL 資料庫,我們通常使用 Redis 來做緩存,這是一篇關於 Redis 安裝的文章,所以不會涉及到 Redis 的高級特性和使用場景,Redis 能夠相容絕大部分的 POSIX 系統,例如 Linux、OS X 等,但是很遺憾不支持在 Windows 上安裝, ...
  • 資料庫 資料庫就是存儲和管理數據的倉庫,用戶可以對資料庫中的數據進行增刪改查等操作。 資料庫的分類 關係型資料庫(Oracle、MySQL、SQLite等) 非關係型資料庫(Redis、MongoDB等) MySQL簡介 MySQL是一個關係型資料庫,由MySQLAB公司開發,目前屬於Oracle旗 ...
  • 原因是在使用<if> 進行條件判斷時, 將datetime類型的欄位與 ' ' 進行了判斷,導致的錯誤 解決, 只使用 <if test="createTime != null"></if> 做判斷就行了 詳細可參考: https://blog.csdn.net/wanghailong_qd/art ...
  • Django csrf CSRF 全稱(Cross Site Request Forgery)跨站請求偽造。也被稱為One Click Attack和Session Riding,通常縮寫為CSRF或XSRF。你可以這樣理解:攻擊者(黑客,釣魚網站)盜用了你的身份,以你的 名義發送惡意請求,這些請求 ...
  • mongodb4.2版本的安裝與配置(windows下),史上最全最基礎最詳細+圖解 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...