戳更多文章:
2-本地環(huán)境搭建&構(gòu)建第一個Flink應(yīng)用
本文是例行介紹,熟悉的直接跳過 - 魯迅
魯迅: ...
大綱
入門篇:
放棄篇:
圖片顯示不了,戳這里:
https://github.com/wangzhiwubigdata/God-Of-BigData/blob/master/Flink
插個廣告
全網(wǎng)唯一一個從0開始幫助Java開發(fā)者轉(zhuǎn)做大數(shù)據(jù)領(lǐng)域的公眾號~
公眾號大數(shù)據(jù)技術(shù)與架構(gòu)或者搜索import_bigdata關(guān)注,大數(shù)據(jù)學(xué)習(xí)路線最新更新,已經(jīng)有很多小伙伴加入了~
Flink是什么
一句話概括
Apache Flink是一個面向分布式數(shù)據(jù)流處理和批量數(shù)據(jù)處理的開源計算平臺,提供支持流處理和批處理兩種類型應(yīng)用的功能。
前身
Apache Flink 的前身是柏林理工大學(xué)一個研究性項目, 在 2014 被 Apache 孵化器所接受,然后迅速地成為了Apache Software Foundation的頂級項目之一。
特點
現(xiàn)有的開源計算方案,會把流處理和批處理作為兩種不同的應(yīng)用類型:流處理一般需要支持低延遲、Exactly-once保證,而批處理需要支持高吞吐、高效處理。
Flink是完全支持流處理,也就是說作為流處理看待時輸入數(shù)據(jù)流是無界的;批處理被作為一種特殊的流處理,只是它的輸入數(shù)據(jù)流被定義為有界的。
Flink組件棧
)
Deployment層
主要涉及了Flink的部署模式,F(xiàn)link支持多種部署模式:本地、集群(Standalone/YARN)、云(GCE/EC2)
Runtime層
Runtime層提供了支持Flink計算的全部核心實現(xiàn),比如:支持分布式Stream處理、JobGraph到ExecutionGraph的映射、調(diào)度等等,為上層API層提供基礎(chǔ)服務(wù)
API層
API層主要實現(xiàn)了面向無界Stream的流處理和面向Batch的批處理API,其中面向流處理對應(yīng)DataStream API,面向批處理對應(yīng)DataSet API
Libaries層
在API層之上構(gòu)建的滿足特定應(yīng)用的實現(xiàn)計算框架,也分別對應(yīng)于面向流處理和面向批處理兩類
面向流處理支持:CEP(復(fù)雜事件處理)、基于SQL-like的操作(基于Table的關(guān)系操作)
面向批處理支持:FlinkML(機(jī)器學(xué)習(xí)庫)、Gelly(圖處理)
Flink的優(yōu)勢
- 支持高吞吐、低延遲、高性能的流處理
- 支持高度靈活的窗口(Window)操作
- 支持有狀態(tài)計算的Exactly-once語義
- 提供DataStream API和DataSet API
Flink基本編程模型
- Flink程序的基礎(chǔ)構(gòu)建模塊是流(streams) 與 轉(zhuǎn)換(transformations)
- 每一個數(shù)據(jù)流起始于一個或多個 source,并終止于一個或多個 sink
下面是一個由Flink程序映射為Streaming Dataflow的示意圖:
并行數(shù)據(jù)流示意圖:
Flink基本架構(gòu)
- Flink是基于Master-Slave風(fēng)格的架構(gòu)
- Flink集群啟動時,會啟動一個JobManager進(jìn)程、至少一個TaskManager進(jìn)程
JobManager
Flink系統(tǒng)的協(xié)調(diào)者,它負(fù)責(zé)接收Flink Job,調(diào)度組成Job的多個Task的執(zhí)行
收集Job的狀態(tài)信息,并管理Flink集群中從節(jié)點TaskManager
TaskManager
- 實際負(fù)責(zé)執(zhí)行計算的Worker,在其上執(zhí)行Flink Job的一組Task
- TaskManager負(fù)責(zé)管理其所在節(jié)點上的資源信息,如內(nèi)存、磁盤、網(wǎng)絡(luò),在啟動的時候?qū)①Y源的狀態(tài)向JobManager匯報
Client
用戶提交一個Flink程序時,會首先創(chuàng)建一個Client,該Client首先會對用戶提交的Flink程序進(jìn)行預(yù)處理,并提交到Flink集群
Client會將用戶提交的Flink程序組裝一個JobGraph, 并且是以JobGraph的形式提交的
最后
本文是例行介紹,熟悉的直接跳過。