2018-11-21-Flink(2)——apache flink 介紹 1 概念

本文轉自個人微信公衆號,原文鏈接

Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded data streams. Flink has been designed to run in all common cluster environments, perform computations at in-memory speed and at any scale.

1 概念

1.1 Bounded Streams VS Unbounded Streams & 批處理 VS 流處理

Bounded Streams 可以理解爲有開始也有結束的數據流,處理這類數據流可以等所有數據都到了再處理,也就是常說的批處理

Unbounded Streams 可以理解爲有開始沒有結束的數據流,這類數據流持續產生數據,所以,也要持續的進行處理而不能等數據流結束再處理,也就是常說的流處理

Apache Flink 既能處理Bounded Streams 也擅長處理Unbounded Streams,既能做批處理也能做流處理。

1.2 部署方式

Apache Flink 是一個分佈式系統,需要資源以運行其它應用,Apache Flink 支持常見的資源管理器,包括Yarn、 Mesos、K8S,也可以以Stand-Alone Cluster的方式運行。

1.3. Runtime

Apache Flink Runtime 是一個典型的master-slave架構, 包括Jobmanagers 和 Taskmanagers 兩部分:

Jobmanagers (masters):協調分佈式執行,包括調度任務、協調checkpoints、從失敗恢復等。一般至少需要一個Jobmanager,在HA環境下,需要有多個Jobmanagers,其中有一個作爲leader,其他的standby。

taskmanagers (workers):執行具體的任務,buffer和傳遞數據流。

另外,Clients 不是Apache Flink Runtime的一部分,但常用於準備和提交Job到 Jobmanager。

1.4 編程模型

1.4.1 抽象

Apache Flink 提供了不同的抽象級別以開發Flink 應用。

Stateful Streaming:抽象級別最低,給應用開發者提供了最大的自由度,實際開發中很少使用。

DataStream / DataSet API: 這是Flink 提供的核心APIs,DataStream API 用於Unbounded Stream Data,DataSet API 用於Boundesd Stream Data,用於使用各種方法對數據進行計算處理,如map等。

Table API:以爲核心的的聲明式DSL,該表可以是動態變化的表,該層API提供了諸如Select、Join、Group-by、Aggregate之類的操作,更加簡潔。另外,用戶可以在Table API和Dataset/Datastream API 之間無縫切換甚至混用。

SQL:跟Table API相似,只不過是以SQL的方式進行描述。

1.4.2 程序與Dataflows

Apache Flink 程序一般包括data streams和 transformations 兩部分,其中,data streams 是數據流,transformations 是操作數據流的算子,以一個或多個數據流爲輸入,輸出一個或多個數據流。

當Apache Flink 程序運行時,Flink 程序可以理解爲包含streams 和 transformation operators 的streaming dataflow,每個dataflow 以一個或多個sources開始並以一個或多個sinks 結束,這個dataflow 類似於DAGs(directed acyclic graphs)。(有沒有一種熟悉的感覺,比如Spark、Flume…)

Sources:數據源,常見的如kafka。

Transformations:數據轉換,可以理解爲對數據的操作。

Sinks:接收器,Flink 轉換後將數據發送到的地方。

1.4.3 其它重要概念

1.4.3.1 Time

在流計算中,Time包括三種:

Ingestion Time:數據記錄進入Flink Data Source的時間。

Processing Time:Flink Operator進行time-based 操作的本地時間。

Event Time:數據的時間,一般有業務意義。

Apache 可以支持這三種Time,每種Time都有特定的用途,後序文章會詳細進行說明。

1.4.3.2 Window

不同於批計算,流計算的計算一般是針對一個窗口的數據的計算,比如“統計過去5分鐘的記錄數”、“過去100個數據的平均值”等。

窗口包括按時間進行劃分的和按數據進行劃分的,典型的包括 tumbling windows、 sliding windowssession windows,每種窗口應用於不同的場景。

1.4.3.3 State

有些操作只需要知道當前數據記錄即可,還有些操作需要其它數據記錄,我們稱這種操作是stateful operations,比如要計算Sum、Avg等,這些值是需要存儲的,因爲會不斷變化,這些值就可以理解爲 state

Apache Flink 提供了內置的狀態管理,這也是Flink 區別於其它流計算引擎的最主要的區別。

1.4.3.4 Checkpoint

Apache Flink的checkpoints 可以理解爲輸入數據流在某一點以及所有operators對應的state,Apache Flink 基於checkpoints 和 stream replay 實現容錯,並基於此實現數據一致性(exactly-once)。

2 Why Flink

上面主要介紹Flink 中的核心概念,總結下爲什麼選擇Flink:

Apache Flink 是一個低延遲、高吞吐、統一的大數據計算引擎。

支持狀態管理,提供有狀態的計算。

提供準確的結果,即使出現數據亂序或數據延遲。Flink 程序符合自然規律,如多種窗口、event time等能滿足正確性的要求,而且,基於checkpoint 和replay 提供故障恢復,支持 Exactly-Once 語義,保障正確性。

支持Yarn / Mesos / K8S等多種資源管理器,可以方便擴展。

是一個批流統一的平臺,在未來,批流融合是一大趨勢。

Flink SQL 降低了使用門檻,便於推廣。

下篇文章,開始編寫第一個Flink 程序。

掃描下方二維碼關注我。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章