衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

淺析大數據技術之Flink

jf_78858299 ? 來源:基礎技術研究 ? 作者:張利龍 ? 2023-03-29 10:46 ? 次閱讀

隨著大數據時代的發展,海量數據和多種業務的實時處理需求激增,比如:實時監控報警系統、實時風控系統、實時推薦系統等,傳統的批處理方式和早期的流式處理框架因其自身的局限性,難以在延遲性、吞吐量、容錯能力以及使用便捷性等方面滿足業務日益苛刻的要求。

在過去的幾年里,從storm到后面spark的異軍突起,面向數據時代的實時計算技術出現了很多。Flink自2019年初開源以來,以其獨特的天然流式計算特性和更為先進的架構設計,極大地改善了以前的流式處理框架所存在的問題,迅速成為大數據實時計算領域炙手可熱的技術框架,以及未來技術重要的發力點。

01 Flink簡介

【什么是Flink】

Flink 是一個框架和分布式處理引擎,用于在無邊界和有邊界數據流上進行有狀態的計算。Flink能在所有常見集群環境中運行,并能以內存速度和任意規模進行計算。使用官網的語句來介紹, Flink 就是 “Stateful Computations over Data Streams”。對于這句話,我們該怎么理解呢。

首先,Flink是一個純流式的計算引擎,它的基本數據模型是數據流。流可以是無邊界的無限流,即一般意義上的流處理。也可以是有邊界的有限流,也就是批處理。因此 Flink 用一套架構同時支持了流處理和批處理。其次,Flink支持有狀態的計算,稍微復雜一點的數據處理,比如說基本的聚合,數據流之間的關聯都是有狀態處理。

更直觀的講,對 Flink ??,其所要處理的主要場景就是流數據,批數據只是流數據的?個極限特例?已,所以 Flink 是?款真正的流批統?的計算引擎。

【無界和有界數據】

**任何類型的數據都可以形成一種事件流。信用卡交易、傳感器測量、機器日志、網站或移動應用程序上的用戶交互記錄,所有這些數據都形成一種流。數據可以被作為無界或者有界流來處理。 **

無界流 :有定義流的開始,但沒有定義流的結束。它們會無休止地產生數據。無界流的數據必須持續處理,即數據被攝取后需要立刻處理。我們不能等到所有數據都到達再處理,因為輸入是無限的,在任何時候輸入都不會完成。處理無界數據通常要求以特定順序攝取事件,例如事件發生的順序,以便能夠推斷結果的完整性。

有界流: 有定義流的開始,也有定義流的結束。有界流可以在攝取所有數據后再進行計算。有界流所有數據可以被排序,所以并不需要有序攝取。有界流處理通常被稱為批處理。

批處理:有界數據**

流處理:無界數據

Flink 擅長處理無界和有界數據集。精確的時間控制和狀態化使得 Flink能夠運行任何處理無界流的應用。有界流則由一些特殊設計的算法和數據結構進行內部處理,也產生了出色的性能。

【有狀態計算】**

**有狀態的計算:每次進行數據計算的時候基于之前數據的計算結果(狀態)做計算,并且每次計算結果都會保存到存儲介質中,計算關聯上下文context 基于有狀態的計算不需要將歷史數據重新計算,提高了計算效率。

無狀態的計算:每次進行數據計算只是考慮當前數據,不會使用之前數據的計算結果。**

圖片

【Flink 基石】

目前比較一致的觀點是,Flink之所以能備受歡迎,離不開它最重要的四個基石:Checkpoint、State、Time、Window。**

首先是Checkpoint機制,這是 Flink 最重要的一個特性。Flink實現了分布式一致性的快照,從而提供了 exactly-once 的語義。在 Flink 之前的流計算系統都沒有很好地解決這一問題。

每一個具有一定復雜度的流處理應用都是有狀態的。提供了一致性的語義之后,Flink 為了讓用戶在編程時能夠更輕松、更容易地去管理狀態,引入了托管狀態(managed state)并提供了 API 接口,讓用戶使用起來感覺就像在用Java 的集合類一樣。

流處理的一個重要方面是應用程序如何衡量時間,即區分事件時間和處理時間。Flink 實現了 watermark 的機制,解決了基于事件時間處理時的數據亂序和數據遲到的問題。

最后,流計算中的計算一般都會基于窗口來計算,所以 Flink 提供了一套開箱即用的窗口操作,包括滾動窗口、滑動窗口、會話窗口,還支持非常靈活的自定義窗口以滿足特殊業務的需求。

02 Flink核心架構

Flink 采用分層的架構設計,從而保證各層在功能和職責上的清晰。如圖所示,自上而下分別是 API & Libraries 層、Runtime 核心層以及物理部署層:

圖片

【API & Libraries 層】

這一層主要提供了編程API和頂層類庫:

編程 API : 用于進行流處理的 DataStream API 和用于進行批處理的 DataSet API。

頂層類庫:包括用于復雜事件處理的庫,用于結構化數據查詢的 SQL & Table 庫,以及基于批處理的機器學習庫和圖形處理庫。

【Runtime 核心層】

這一層是 Flink 分布式計算框架的核心實現層,包括作業轉換,任務調度,資源分配,任務執行等功能,基于這一層的實現,可以在流式引擎下同時運行流處理程序和批處理程序。

【 物理部署層】

Flink的物理部署層,用于支持在不同平臺上部署應用。Flink 不僅可以運行在包括 YARN、Kubernetes 在內的多種資源管理框架上,還支持在裸機集群上獨立部署。在啟用高可用選項的情況下,它不存在單點失效問題。事實證明,Flink 已經可以擴展到數千核心,其狀態可以達到 TB 級別,且仍能保持高吞吐、低延遲的特性。

03 Flink分層API

在上面介紹的 API & Libraries 這一層,Flink 又進行了更為具體的劃分。

按照如圖所示的層次結構,API 的一致性由下至上依次遞增,接口的表現能力由下至上依次遞減,各層的核心功能如下:

【SQL & Table API】

Flink 提供的最高層級的抽象是 SQL 。

Flink 支持兩種關系型的 API,Table API 和 SQL。這兩個 API 都是批處理和流處理統一的 API,意味著在無邊界的實時數據流和有邊界的歷史記錄數據流上,關系型 API 會以相同的語義執行查詢,并產生相同的結果。支持用戶自定義的標量函數,聚合函數以及表值函數,可以滿足多樣化的查詢需求。

【DataStream API】

DataStream & DataSet API 是 Flink 數據處理的核心 API,支持使用Java或Scala語言進行調用,提供了數據讀取,數據轉換和數據輸出等一系列常用操作的封裝。

DataStream API 為許多通用的流處理操作提供了處理原語。這些操作包括窗口、逐條記錄的轉換操作,在處理事件時進行外部數據庫查詢等,并預先定義了例如map()、reduce()、aggregate()等函數。你可以通過擴展實現預定義接口或使用lambda 表達式實現自定義的函數。

【ProcessFunction】

ProcessFunction 是 Flink 所提供的最具表達力的接口,可以處理一或兩條輸入數據流中的單個事件,或者歸入一個特定窗口內的多個事件。它提供了對于時間和狀態的細粒度控制。開發者可以在其中任意地修改狀態, 實現許多有狀態的事件驅動應用所需要的、基于單個事件的復雜業務邏輯。

04 Flink核心組件

Flink 核心架構的第二層是 Runtime 層,該層包含了兩個重要角色,分別是JobManager和TaskManager,是一個典型的Master-Slave架構。JobManager相當于是Master,TaskManager相當于是Slave。它們的功能分別如下:

圖片

(一)JobManager(JVM進程)

負責整個集群的資源管理與任務調度,在一個集群中只能有一個正在工作(active)的 JobManager,如果HA集群,那么其他JobManager是standby狀態。

(1)資源管理。集群啟動,TaskManager會將當前節點的資源信息注冊給JobManager,所有TaskManager全部注冊完畢,集群啟動成功,此時JobManager會根據集群中的資源情況,為當前的Application分配TaskSlot資源。

(2)任務調度。分發task到TaskSlot中運行,Job執行過程中,JobManager會根據設置的策略觸發checkpoint,任務執行完畢,JobManager會將Job執行的信息反饋給client,并且釋放資源。

(二)TaskManager(JVM進程)

(1)負責當前節點上的任務運行及資源管理,TaskManager資源通過TaskSlot進行了劃分,每個TaskSlot代表的是一份固定資源。例如,具有三個slots 的TaskManager會將其管理的內存資源分成三等份給每個 slot。

(2)負責TaskManager之間的數據交換。

05 Flink應用場景

世界各地有很多要求嚴苛的流處理應用都運行在 Flink 之上。接下來我們介紹常見的幾類應用,分別是:事件驅動型應用,數據分析應用以及數據管道應用。

【事件驅動型應用】

事件驅動型應用是一類具有狀態的應用,它從一個或多個事件流提取數據,并根據到來的事件觸發計算、狀態更新或其它外部動作。

在傳統架構中,應用需要讀寫遠程事務型數據庫。相反,事件驅動型應用是在計算存儲分離的傳統應用基礎上進化而來,是基于狀態化流處理來完成。在該設計中,數據和計算不會分離,應用只需訪問本地(內存或磁盤)即可獲取數據。系統容錯性的實現依賴于定期向遠程持久化存儲寫入checkpoint。下圖描述了傳統應用和事件驅動型應用架構的區別。

事件驅動型應用無須查詢遠程數據庫,本地數據訪問使得它具有更高的吞吐和更低的延遲。典型的應用實例:反欺詐,異常檢測,基于規則的報警以及業務流程監控等。

【數據分析應用】

數據分析任務需要從原始數據中提取有價值的信息和指標。傳統的分析方式通常是利用批查詢,或將事件記錄下來并基于此構建應用來完成。為了得到最新數據的分析結果,必須先將它們加入分析數據集并重新執行查詢或運行應用,隨后將結果寫入存儲系統。

借助一些先進的流處理引擎,還可以實時地進行數據分析。和傳統模式下讀取有限數據集不同,流式查詢會接入實時事件流,并隨著事件消費持續產生和更新結果。這些結果數據可能會寫入外部數據庫系統或以內部狀態的形式維護。

如圖所示,Flink為持續流式分析和批量分析都提供了良好的支持。具體而言,它內置的 SQL 接口,將批、流查詢的語義統一起來。無論是在記錄事件的靜態數據集上還是實時事件流上,相同 SQL 查詢都會得到一致的結果。典型的應用實例:電信網絡質量監控,移動應用中的產品更新及實驗評估分析,消費者技術中的實時數據即席分析以及大規模圖分析等。

【數據管道應用】

提取-轉換-加載(ETL)是一種在存儲系統之間進行數據轉換和遷移的常用方法。ETL 作業通常會周期性地觸發,將數據從事務型數據庫拷貝到分析型數據庫或數據倉庫。

數據管道和 ETL 作業的用途相似,都可以轉換、豐富數據,并將其從某個存儲系統移動到另一個。但數據管道是以持續流模式運行,而非周期性觸發。因此它支持從一個不斷生成數據的源頭讀取記錄,并將它們以低延遲移動到終點。例如:數據管道可以用來監控文件系統目錄中的新文件,并將其數據寫入事件日志;另一個應用可能會將事件流物化到數據庫或增量構建和優化查詢索引

和周期性 ETL 作業相比,持續數據管道可以明顯降低將數據移動到目的端的延遲。此外,由于它能夠持續消費和發送數據,因此用途更廣,支持用例更多。很多常見的數據轉換和增強操作可以利用 Flink 的接口及用戶自定義函數解決。典型的應用實例:電子商務中的實時查詢索引構建以及電子商務中的持續ETL等。

06 Flink優點及挑戰

【Flink 的優點】

基于上面的介紹,總結一下 Flink 的優點:

1)Flink 是基于事件驅動 (Event-driven) 的應用,能夠同時支持流處理和批處理,結合Watermark處理亂序數據;

2)同時支持高吞吐、低延遲、高性能;

3)基于內存的計算,能夠保證高吞吐和低延遲,具有優越的性能表現;

4)支持精確一次 (Exactly-once) 語意,能夠完美地保證一致性和正確性;

5)支持有狀態計算,并且可以將狀態存在內存或者 RocksDB;

6)分層 API ,能夠滿足各個層次的開發需求;

7)支持高可用配置,支持保存點機制,能夠提供安全性和穩定性上的保證;

8)多樣化的部署方式,支持本地,遠端,云端等多種部署方案;

9)具有橫向擴展架構,能夠按照用戶的需求進行動態擴容;

10)活躍度極高的社區和完善的生態圈的支持。

**【Flink面臨的挑戰】

**Flink目前流計算的模型已經相對比較成熟和領先,也經歷了各個公司大規模生產的驗證,屬于大數據生態里的計算環節,只做計算,不做存儲。但是在實際工作當中,你會發現往往單獨用Flink是不夠的。比如你的數據是從哪里讀出來,計算完之后數據又將存到哪里,又怎么消費這些數據,如何利用Flink來完成某個垂直領域的特殊任務等等。

**與此同時,如果要用Flink要做其他一些場景(比如機器學習,交互式分析)就會比較復雜,用戶體驗上還有很大的提升空間。這些涉及到上下游,需要一個強大的生態圈來完成。這也正是Flink生態所面臨的挑戰。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2553

    文章

    51407

    瀏覽量

    756654
  • 數據
    +關注

    關注

    8

    文章

    7145

    瀏覽量

    89591
  • 分布式
    +關注

    關注

    1

    文章

    924

    瀏覽量

    74613
  • 大數據
    +關注

    關注

    64

    文章

    8908

    瀏覽量

    137801
收藏 人收藏

    評論

    相關推薦

    探尋大數據時代的商業變革

    `科技的進步在很多時候總會超出我們的想象。近年來,“大數據”一詞逐漸被大眾所熟知,人們用它來描述和定義信息爆炸時代產生的海量數據,并命名與相關的技術發展與創新。
    發表于 05-27 17:11

    常用大數據處理技術歸類

    “21世紀最缺的是什么?人才!”。在大數據發展如此快的今天,大數據工程師已經成為一個新興職業。大數據是信息技術,是人和人、人和機器、機器和
    發表于 02-28 17:02

    常見大數據應用有哪些?

    大數據技術為決策提供依據,在***、企業、科研項目等決策中扮演著重要的角色,在社會治理和企業管理中起到了不容忽視的作用,很多國家,如中國、美國以及歐盟等都已將大數據列入國家發展戰略,微軟、谷歌、百度
    發表于 03-13 16:50

    大數據運用的技術

    大數據是對海量數據進行存儲、計算、統計、分析處理的一系列處理手段,處理的數據量通常是TB級,甚至是PB或EB級的數據,這是傳統數據處理手段所
    發表于 04-08 16:50

    大數據開發核心技術詳解

    數據的核心是云技術和BI。關于大數據和云計算的關系人們通常會有誤解,而且也會把它們混起來說,分別做一句話直白解釋就是:云計算就是硬件資源的虛擬化;大數據就是海量
    發表于 07-26 16:26

    淺析Flink程序

    Flink 編程模型
    發表于 09-09 16:47

    阿里巴巴高級技術專家章劍鋒:大數據發展的 8 個要點

    學習,實時更新機器學習模型目前以 Kafka,Flink 為代表的流處理計算引擎已經為實時計算提供了堅實的底層技術支持,相信未來在實時可視化數據以及在線機器學習方面會有更多優秀的產品涌現出來。當
    發表于 10-14 10:56

    什么是大數據大數據的特點有哪些

    大數據(big data)目錄1什么是大數據2大數據的定義3大數據的特點[1]4大數據的作用[2]5大數
    發表于 07-12 06:52

    大數據技術與應用是學什么的?

    大數據技術與應用是學什么的?大數據是指無法在一定時間內用常規軟件工具對其內容進行抓取、管理和處理的數據集合。大數據
    發表于 07-27 07:47

    淺析STM32printf重定向

    淺析STM32printf重定向
    發表于 12-02 06:19

    企業實踐 | 如何更好地使用 Apache Flink 解決數據計算問題?

    、網易、愛奇藝、中國農業銀行、奇虎360、貝殼找房、奇安信等不同行業一線技術專家分享 Apache Flink大數據基礎平臺建設進展和實踐,詳細解讀大數據相關
    發表于 11-14 23:06 ?471次閱讀

    開源大數據生態下的 Flink 應用實踐

    過去十年,面向整個數字時代的關鍵技術接踵而至,從被人們接受,到開始步入應用。大數據與計算作為時代的關鍵詞已被廣泛認知,算力的重要性日漸凸顯并發展成為企業新的增長點。Apache Flink(以下簡稱
    發表于 11-23 00:03 ?834次閱讀

    Flink 在人工智能領域的應用實踐

    人工智能是未來十年最重要的技術革命與驅動力,在各行各業產生著日益重要的作用,它與大數據的發展相輔相成,不僅推動人類社會邁入更智慧的世界,也為數據的應用帶來無可估量的價值。 11 月 28 - 30
    發表于 03-17 10:53 ?678次閱讀

    Flink學習精要

    源碼。如今Flink已被很多人認為是大數據實時處理的方向和未來,許多公司也都在招聘和儲備掌握Flink技術的人才。那Flink到底是什么,又
    發表于 09-25 11:51 ?0次下載

    什么是 Flink SQL 解決不了的問題?

    簡介 在實時數據開發過程中,大家經常會用 Flink SQL 或者 Flink DataStream API 來做數據加工。通常情況下選用2者都能加工出想要的
    的頭像 發表于 07-09 20:50 ?383次閱讀
    红9百家乐的玩法技巧和规则 | 全讯网3344111.com| 大城县| 凯旋门百家乐现金网| TT娱乐城娱乐,| 百家乐是骗人的| 网上百家| 百家乐娱乐城赌场| 克拉克百家乐官网试玩| 做生意风水问题| bet365会员注册| 谈谈百家乐赢钱技巧| 秀山| 百家乐五湖四海赌场娱乐网规则| 澳门百家乐官网游戏皇冠网| 威尼斯人娱乐城官方网| 娱乐网百家乐官网的玩法技巧和规则 | 兰州市| 百家乐网址官网| 属猴人做生意门面的风水| 玩百家乐官网新2娱乐城| 大发888体育官网| 棋牌百家乐怎么玩| 百家乐官网游戏规范| 博爱县| 大发888注册58| 百家乐专家赢钱打法| 新加坡百家乐官网赌法| 赌博娱乐城| 皇冠赔率| 鑫鑫百家乐的玩法技巧和规则 | 梅州市| 足球波胆| 单机棋牌游戏下载| 夜总会百家乐的玩法技巧和规则| 百家乐赌博现金网平台排名| 大发888官方zhuce| 百家乐桌码合| 蓝盾百家乐网址| 澳门百家乐秘诀| 澳门百家乐官网新濠天地|