Categories
程式開發

Flink基礎教程(二):初探Flink


編者按:本文節選自圖靈程序設計叢書 《Flink基礎教程》一書中的部分章節。

Flink 的主頁 1 在其頂部展示了該項目的理念:“Apache Flink 是為分佈式、高性能、隨時可用以及準確的流處理應用程序打造的開源流處理框架。”Flink 不僅能提供同時支持高吞吐和exactly-once語義的實時計算,還能提供批量數據處理,這讓許多人感到吃驚。魚與熊掌並非不可兼得,Flink 用同一種技術實現了兩種功能。

1 http://flink.apache.org

這個頂級的 Apache 項目是怎麼誕生的呢? Flink 起源於 Stratosphere 項目,Stratosphere 是在 2010~2014 年由 3 所地處柏林的大學和歐洲的一些其他的大學共同進行的研究項目。當時,這個項目已經吸引了一個較大的社區,一部分原因是它出現在了若干公共開發者研討會上,比如在柏林舉辦的 Berlin Buzzwords,以及在科隆舉辦的 NoSQL Matters,等等。強大的社區基礎是這個項目適合在 Apache 軟件基金會中孵化的一個原因。

2014 年 4 月,Stratosphere 的代碼被複製並捐獻給了 Apache 軟件基金會,參與這個孵化項目的初始成員均是 Stratosphere 系統的核心開發人員。不久之後,創始團隊中的許多成員離開大學並創辦了一個公司來實現 Flink 的商業化,他們為這個公司取名為 data Artisans。在孵化期間,為了避免與另一個不相關的項目重名,項目的名稱也發生了改變。 Flink 這個名字被挑選出來,以彰顯這種流處理器的獨特性:在德語中,flink 一詞表示快速和靈巧。項目採用一隻松鼠的彩色圖案作為 logo,這不僅因為松鼠具有快速和靈巧的特點,還因為柏林的松鼠有一種迷人的紅棕色。

Flink基礎教程(二):初探Flink 1

圖 1:左側:柏林的紅松鼠擁有可愛的耳朵;右側:Flink 的松鼠 logo 擁有可愛的尾巴,尾巴的顏色與 Apache 軟件基金會的 logo 顏色相呼應。這是一隻 Apache 風格的松鼠!

這個項目很快完成了孵化,並在 2014 年 12 月一躍成為 Apache 軟件基金會的頂級項目。作為 Apache 軟件基金會的 5 個最大的大數據項目之一,Flink 在全球範圍內擁有 200 多位開發人員,以及若干公司中的諸多上線場景,有些甚至是世界 500 強的公司。在作者撰寫本書的時候,共有 34 個 Flink 線下聚會在世界各地舉辦,社區大約有 12 000 名成員,還有眾多 Flink 演講者參與到各種大數據研討會中。 2015 年 10 月,第一屆 Flink Forward 研討會在柏林舉行。

批處理與流處理

Flink 是如何同時實現批處理與流處理的呢?答案是,Flink 將批處理(即處理有限的靜態數據)視作一種特殊的流處理。

Flink 的核心計算構造是圖 2 中的 Flink Runtime 執行引擎,它是一個分佈式系統,能夠接受數據流程序並在一台或多台機器上以容錯方式執行。 Flink Runtime 執行引擎可以作為 YARN(Yet Another Resource Negotiator)的應用程序在集群上運行,也可以在 Mesos 集群上運行,還可以在單機上運行(這對於調試 Flink 應用程序來說非常有用)。

Flink基礎教程(二):初探Flink 2

圖 2:Flink 技術棧的核心組成部分。值得一提的是,Flink 分別提供了面向流處理的接口(DataStream API)和麵向批處理的接口(DataSet API)。因此,Flink 既可以完成流處理,也可以完成批處理。 Flink 支持的拓展庫涉及機器學習(FlinkML)、複雜事件處理(CEP),以及圖計算(Gelly),還有分別針對流處理和批處理的 Table API

能被 Flink Runtime 執行引擎接受的程序很強大,但是這樣的程序有著冗長的代碼,編寫起來也很費力。基於這個原因,Flink 提供了封裝在 Runtime 執行引擎之上的 API,以幫助用戶更方便地生成流式計算程序。 Flink 提供了用於流處理的 DataStream API 和用於批處理的 DataSet API。值得注意的是,儘管 Flink Runtime 執行引擎是基於流處理的,但是 DataSet API 先於 DataStream API 被開發出來,這是因為工業界對無限流處理的需求在 Flink 誕生之初並不大。

DataStream API 可以流暢地分析無限數據流,並且可以用 Java 或者 Scala 來實現。開發人員需要基於一個叫 DataStream 的數據結構來開發,這個數據結構用於表示永不停止的分佈式數據流。

Flink 的分佈式特點體現在它能夠在成百上千台機器上運行,它將大型的計算任務分成許多小的部分,每個機器執行一個部分。 Flink 能夠自動地確保在發生機器故障或者其他錯誤時計算能持續進行,或者在修復 bug 或進行版本升級後有計劃地再執行一次。這種能力使得開發人員不需要擔心失敗。 Flink 本質上使用容錯性數據流,這使得開發人員可以分析持續生成且永遠不結束的數據(即流處理)。

Flink 解決了許多問題,比如保證了 exactly-once 語義和基於事件時間的數據窗口。開發人員不再需要在應用層解決相關問題,這大大地降低了出現 bug 的概率。

因為不用再在編寫應用程序代碼時考慮如何解決問題,所以工程師的時間得以充分利用,整個團隊也因此受益。好處並不局限於縮短開發時間,隨著靈活性的增加,團隊整體的開髮質量得到了提高,運維工作也變得更容易、更高效。 Flink 讓應用程序在生產環境中獲得良好的性能。儘管相對較新,但是 Flink 已經在生產環境中得到了應用,下一節將做更詳細的介紹。

圖書簡介https://www.ituring.com.cn/book/2036

Flink基礎教程(二):初探Flink 3

相關閱讀

Flink基礎教程(一):流處理技術的演變