欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          Flink入門基礎(chǔ) – 簡介

          一. Flink的引入

                  這幾年大數(shù)據(jù)的飛速發(fā)展,出現(xiàn)了很多熱門的開源社區(qū),其中著名的有 Hadoop、Storm,以及后來的 Spark,他們都有著各自專注的應(yīng)用場景。Spark 掀開了內(nèi)存計算的先河,也以內(nèi)存為賭注,贏得了內(nèi)存計算的飛速發(fā)展。Spark 的火熱或多或少的掩蓋了其他分布式計算的系統(tǒng)身影。就像 Flink,也就在這個時候默默的發(fā)展著。

          在國外一些社區(qū),有很多人將大數(shù)據(jù)的計算引擎分成了 4 代,當然,也有很多人不會認同。我們先姑且這么認為和討論。

          首先第一代的計算引擎,無疑就是 Hadoop 承載的 MapReduce。這里大家應(yīng)該都不會對 MapReduce 陌生,它將計算分為兩個階段,分別為 Map 和 Reduce。對于上層應(yīng)用來說,就不得不想方設(shè)法去拆分算法,甚至于不得不在上層應(yīng)用實現(xiàn)多個 Job 的串聯(lián),以完成一個完整的算法,例如迭代計算。

          由于這樣的弊端,催生了支持 DAG 框架的產(chǎn)生。因此,支持 DAG 的框架被劃分為第二代計算引擎。如 Tez 以及更上層的 Oozie。這里我們不去細究各種 DAG 實現(xiàn)之間的區(qū)別,不過對于當時的 Tez 和 Oozie 來說,大多還是批處理的任務(wù)。

          接下來就是以 Spark 為代表的第三代的計算引擎。第三代計算引擎的特點主要是 Job 內(nèi)部的 DAG 支持(不跨越 Job),以及強調(diào)的實時計算。在這里,很多人也會認為第三代計算引擎也能夠很好的運行批處理的 Job。

          隨著第三代計算引擎的出現(xiàn),促進了上層應(yīng)用快速發(fā)展,例如各種迭代計算的性能以及對流計算和 SQL 等的支持。Flink 的誕生就被歸在了第四代。這應(yīng)該主要表現(xiàn)在 Flink 對流計算的支持,以及更一步的實時性上面。當然 Flink 也可以支持 Batch 的任務(wù),以及 DAG 的運算。

          二. Flink簡介

          Apache Flink是一個框架和分布式處理引擎,用于對無界和有界數(shù)據(jù)流進行有狀態(tài)計算。Flink設(shè)計為在所有常見的集群環(huán)境中運行,以內(nèi)存速度和任何規(guī)模執(zhí)行計算。

          1.無界流和有界流

          任何類型的數(shù)據(jù)都是作為事件流產(chǎn)生的。信用卡交易,傳感器測量,機器日志或網(wǎng)站或移動應(yīng)用程序上的用戶交互,所有這些數(shù)據(jù)都作為流生成。

          數(shù)據(jù)可以作為無界或有界流處理。

          1. 無界流有一個開始但沒有定義的結(jié)束。它們不會在生成時終止并提供數(shù)據(jù)。必須持續(xù)處理無界流,即必須在攝取事件后立即處理事件。無法等待所有輸入數(shù)據(jù)到達,因為輸入是無界的,并且在任何時間點都不會完成。處理無界數(shù)據(jù)通常要求以特定順序(例如事件發(fā)生的順序)攝取事件,以便能夠推斷結(jié)果完整性。

          2. 有界流具有定義的開始和結(jié)束。可以在執(zhí)行任何計算之前通過攝取所有數(shù)據(jù)來處理有界流。處理有界流不需要有序攝取,因為可以始終對有界數(shù)據(jù)集進行排序。有界流的處理也稱為批處理。

          Flink入門基礎(chǔ) - 簡介

          Apache Flink擅長處理無界和有界數(shù)據(jù)集。精確控制時間和狀態(tài)使Flink的運行時能夠在無界流上運行任何類型的應(yīng)用程序。有界流由算法和數(shù)據(jù)結(jié)構(gòu)內(nèi)部處理,這些算法和數(shù)據(jù)結(jié)構(gòu)專門針對固定大小的數(shù)據(jù)集而設(shè)計,從而產(chǎn)生出色的性能。

          2.隨處部署應(yīng)用程序

          Apache Flink是一個分布式系統(tǒng),需要計算資源才能執(zhí)行應(yīng)用程序。Flink與所有常見的集群資源管理器(如Hadoop YARN,Apache MesosKubernetes)集成,但也可以設(shè)置為作為獨立集群運行。

          Flink旨在很好地適用于之前列出的每個資源管理器。這是通過特定于資源管理器的部署模式實現(xiàn)的,這些模式允許Flink以其慣用的方式與每個資源管理器進行交互。

          部署Flink應(yīng)用程序時,F(xiàn)link會根據(jù)應(yīng)用程序配置的并行性自動識別所需資源,并從資源管理器請求它們。如果發(fā)生故障,F(xiàn)link會通過請求新資源來替換發(fā)生故障的容器。提交或控制應(yīng)用程序的所有通信都通過REST調(diào)用進行。這簡化了Flink在許多環(huán)境中的集成。

          3.以任何比例運行應(yīng)用程序

          Flink旨在以任何規(guī)模運行有狀態(tài)流應(yīng)用程序。應(yīng)用程序可以并行化為數(shù)千個在集群中分布和同時執(zhí)行的任務(wù)。因此,應(yīng)用程序可以利用幾乎無限量的CPU,主內(nèi)存,磁盤和網(wǎng)絡(luò)IO。而且,F(xiàn)link可以輕松維護非常大的應(yīng)用程序狀態(tài)。其異步和增量檢查點算法確保對處理延遲的影響最小,同時保證一次性狀態(tài)一致性。

          用戶報告了在其生產(chǎn)環(huán)境中運行的Flink應(yīng)用程序的可擴展性數(shù)字令人印象深刻,例如

          • 應(yīng)用程序每天處理數(shù)萬億個事件,
          • 應(yīng)用程序維護多個TB的狀態(tài),以及
          • 應(yīng)用程序在數(shù)千個內(nèi)核的運行。

          4.利用內(nèi)存中的性能

          有狀態(tài)Flink應(yīng)用程序針對本地狀態(tài)訪問進行了優(yōu)化。任務(wù)狀態(tài)始終保留在內(nèi)存中,或者,如果狀態(tài)大小超過可用內(nèi)存,則保存在訪問高效的磁盤上數(shù)據(jù)結(jié)構(gòu)中。因此,任務(wù)通過訪問本地(通常是內(nèi)存中)狀態(tài)來執(zhí)行所有計算,從而產(chǎn)生非常低的處理延遲。Flink通過定期和異步檢查本地狀態(tài)到持久存儲來保證在出現(xiàn)故障時的一次狀態(tài)一致性。

          Flink入門基礎(chǔ) - 簡介

          5.Flink的架構(gòu)

              Flink 可以支持本地的快速迭代,以及一些環(huán)形的迭代任務(wù)。并且 Flink 可以定制化內(nèi)存管理。在這點,如果要對比 Flink 和 Spark 的話,F(xiàn)link 并沒有將內(nèi)存完全交給應(yīng)用層。這也是為什么 Spark 相對于 Flink,更容易出現(xiàn) OOM 的原因(out of memory)。就框架本身與應(yīng)用場景來說,F(xiàn)link 更相似與 Storm。如果之前了解過 Storm 或者 Flume 的讀者,可能會更容易理解 Flink 的架構(gòu)和很多概念。下面讓我們先來看下 Flink 的架構(gòu)圖。

           Flink入門基礎(chǔ) - 簡介

          我們可以了解到 Flink 幾個最基礎(chǔ)的概念,Client、JobManager 和 TaskManager。Client 用來提交任務(wù)給 JobManager,JobManager 分發(fā)任務(wù)給 TaskManager 去執(zhí)行,然后 TaskManager 會心跳的匯報任務(wù)狀態(tài)??吹竭@里,有的人應(yīng)該已經(jīng)有種回到 Hadoop 一代的錯覺。確實,從架構(gòu)圖去看,JobManager 很像當年的 JobTracker,TaskManager 也很像當年的 TaskTracker。然而有一個最重要的區(qū)別就是 TaskManager 之間是是流(Stream)。其次,Hadoop 一代中,只有 Map 和 Reduce 之間的 Shuffle,而對 Flink 而言,可能是很多級,并且在 TaskManager 內(nèi)部和 TaskManager 之間都會有數(shù)據(jù)傳遞,而不像 Hadoop,是固定的 Map 到 Reduce。

          三. Flink技術(shù)特點

          1. 流處理特性

          • 支持高吞吐、低延遲、高性能的流處理
          • 支持帶有事件時間的窗口(Window)操作
          • 支持有狀態(tài)計算的Exactly-once語義
          • 支持高度靈活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作
          • 支持具有Backpressure功能的持續(xù)流模型
          • 支持基于輕量級分布式快照(Snapshot)實現(xiàn)的容錯
          • 一個運行時同時支持Batch on Streaming處理和Streaming處理
          • Flink在JVM內(nèi)部實現(xiàn)了自己的內(nèi)存管理
          • 支持迭代計算
          • 支持程序自動優(yōu)化:避免特定情況下Shuffle、排序等昂貴操作,中間結(jié)果有必要進行緩存

          2. API支持

          • 對Streaming數(shù)據(jù)類應(yīng)用,提供DataStream API
          • 對批處理類應(yīng)用,提供DataSet API(支持Java/Scala)

          3. Libraries支持

          • 支持機器學習(FlinkML)
          • 支持圖分析(Gelly)
          • 支持關(guān)系數(shù)據(jù)處理(Table)
          • 支持復雜事件處理(CEP)

          4. 整合支持

          • 支持Flink on YARN
          • 支持HDFS
          • 支持來自Kafka的輸入數(shù)據(jù)
          • 支持Apache HBase
          • 支持Hadoop程序
          • 支持Tachyon
          • 支持ElasticSearch
          • 支持RabbitMQ
          • 支持Apache Storm
          • 支持S3
          • 支持XtreemFS

          5. Flink生態(tài)圈

          Flink 首先支持了 Scala 和 Java 的 API,Python 也正在測試中。Flink 通過 Gelly 支持了圖操作,還有機器學習的 FlinkML。Table 是一種接口化的 SQL 支持,也就是 API 支持,而不是文本化的 SQL 解析和執(zhí)行。對于完整的 Stack 我們可以參考下圖。

           Flink入門基礎(chǔ) - 簡介

               Flink 為了更廣泛的支持大數(shù)據(jù)的生態(tài)圈,其下也實現(xiàn)了很多 Connector 的子項目。最熟悉的,當然就是與 Hadoop HDFS 集成。其次,F(xiàn)link 也宣布支持了 Tachyon、S3 以及 MapRFS。不過對于 Tachyon 以及 S3 的支持,都是通過 Hadoop HDFS 這層包裝實現(xiàn)的,也就是說要使用 Tachyon 和 S3,就必須有 Hadoop,而且要更改 Hadoop 的配置(core-site.xml)。如果瀏覽 Flink 的代碼目錄,我們就會看到更多 Connector 項目,例如 Flume 和 Kafka。

          四. Flink的編程模型

          Flink提供不同級別的抽象來開發(fā)流/批處理應(yīng)用程序。

          Flink入門基礎(chǔ) - 簡介

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號