Apache flink 簡(jiǎn)介
????Apache flink 是分布式流式數(shù)據(jù)處理框架,主要用于有界(bounded)和無(wú)界(unbounded)數(shù)據(jù)流的有狀態(tài)處理蚪腋,具有高性能、高吞吐、高容災(zāi)等特性瞧挤。
何為有界和無(wú)界數(shù)據(jù)流
- 有界流:數(shù)據(jù)有明確的開始和結(jié)束,在數(shù)據(jù)處理的時(shí)候可以進(jìn)行統(tǒng)一的批量處理儡湾。
- 無(wú)界流:可以想象成水管特恬,有數(shù)據(jù)流的開始,未定義數(shù)據(jù)流的結(jié)束徐钠。因此癌刽,數(shù)據(jù)需要進(jìn)行實(shí)時(shí)的處理,不可能等到所有的數(shù)據(jù)都到達(dá)之后才進(jìn)行處理。
何為狀態(tài)
- 狀態(tài)是 flink 處理數(shù)據(jù)過(guò)程中所產(chǎn)生的中間可操作結(jié)果显拜,可用于任務(wù)的恢復(fù)衡奥,flink 的checkpoint機(jī)制就是狀態(tài)很有用的產(chǎn)物(checkpoint機(jī)制在后續(xù)會(huì)有深入介紹)。
flink 架構(gòu)
????如下圖是 flink 簡(jiǎn)單架構(gòu)圖解:
????由圖中可以看到远荠,在 flink 程序提交執(zhí)行的過(guò)程中會(huì)涉及到3個(gè)部分矮固,其中 JobManager 和 TaskManager 是運(yùn)行的兩個(gè)JVM進(jìn)程:
- Cli:提交程序的客戶端,我們的任務(wù)程序會(huì)通過(guò) Cli 進(jìn)行解析譬淳,然后提交給 JobManager 档址。同時(shí),Cli 也是接收 JobMnager 結(jié)果的接收者瘦赫。
- JobManager:它是 flink 的 master 進(jìn)程辰晕,對(duì) TaskManager進(jìn)行資源管理,它接受 Cli 提交的任務(wù)流确虱,然后根據(jù) TaskManger 當(dāng)前的資源使用情況進(jìn)行任務(wù)的分配含友。同時(shí),它與 TaskManger 時(shí)刻保持通信校辩,監(jiān)聽 TaskManger 的健康狀態(tài)窘问。另外,JobManager 也是 保存 checkpoint 的地方宜咒。通常情況下惠赫,JobManager 會(huì)存在單點(diǎn)的問(wèn)題,因此故黑,需要考慮在此處做HA處理儿咱。
- TaskManger:它是 flink 的 worker 進(jìn)程,在 TaskManager 啟動(dòng)時(shí)會(huì)分配相應(yīng)的 slot 槽位场晶,slot 是 flink 任務(wù)執(zhí)行的最小單元混埠,各個(gè) slot 之間內(nèi)存均分,cpu 共享诗轻。從 JobManager 發(fā)來(lái)的任務(wù)通常以 task 的形式在這里進(jìn)行執(zhí)行钳宪, 。在hdfs文件系統(tǒng)中扳炬,TaskManager 通常跟 DataNode 共存吏颖,以達(dá)到計(jì)算向數(shù)據(jù)移動(dòng)的目的。
flink 部署使用
????flink 的部署方式有多種恨樟,主要有l(wèi)ocal 模式半醉、standalone 模式、yarn 模式等等劝术,這里主要通過(guò) local 模式進(jìn)行簡(jiǎn)單應(yīng)用測(cè)試:
flink 下載安裝
????flink local模式很簡(jiǎn)單(前提是已經(jīng)安裝了 JDK)奉呛,去官網(wǎng)下載 flink 安裝包计螺,然后進(jìn)行解壓:
tar zxvf flink-1.8.2-bin-scala_2.11.tgz
cd flink-1.8.2
???? 啟動(dòng) flink,然后通過(guò) jps 進(jìn)行驗(yàn)證瞧壮,會(huì)看到 JobManager 進(jìn)程(StandaloneSessionClusterEntrypoint)和 TaskManager 進(jìn)程(TaskManagerRunner):
./bin/start-cluster.sh
???? 下面我們可以登錄本地的 flink web界面進(jìn)行一些操作(地址:http://localhost:8081/),如下圖:
- 由圖中可以看到匙握,在本地模式下咆槽,flink 只有一個(gè) TaskManager,每個(gè) TaskManager 默認(rèn)分配了一個(gè)槽位 slot圈纺。當(dāng)然秦忿,這種方式只適用于本地的程序測(cè)試,在生產(chǎn)中蛾娶,通常采用 standalone 模式或者 yarn 模式晾咪。
flink 任務(wù)提交
在本地模式下妖混,flink 程序可以通過(guò)命令行進(jìn)行任務(wù)提交,也可以通過(guò) web 界面進(jìn)行提交,
- 命令行提交仇哆,這是 flink 自帶的一個(gè)單詞統(tǒng)計(jì)的例子:
cd flink-1.8.2
./bin/flink run /Users/liudi/app/flink-1.8.2/examples/batch/WordCount.jar
Starting execution of program
Executing WordCount example with default input data set.
Use --input to specify file input.
Printing result to stdout. Use --output to specify output path.
(a,5)
(action,1)
......
- web 界面任務(wù)提交:
- 在剛才展示的界面左側(cè)欄里有一菜單 submit new job,然后 add new 即可添加任務(wù)成功判族。
???? 通過(guò)web界面進(jìn)行任務(wù)提交奖恰,我們可以清晰的觀擦任務(wù)每一步的執(zhí)行,而且任務(wù)的執(zhí)行結(jié)果狀態(tài)也可以清晰可見寨躁。
Ok穆碎,通過(guò)上面兩種方式可以進(jìn)行任務(wù)的提交,這里我們使用了默認(rèn)的配置信息职恳。事實(shí)上所禀,flink 在任務(wù)提交時(shí)可以進(jìn)行多個(gè)參數(shù)的配置,適合我們進(jìn)行 flink 的調(diào)優(yōu)工作放钦,這里就不多做介紹色徘。
總結(jié)
???? 這里主要對(duì) flink 做了一個(gè)簡(jiǎn)單的介紹,并對(duì)其安裝最筒、部署贺氓、啟動(dòng),以及 flink 任務(wù)的提交做了簡(jiǎn)單操作床蜘,接下來(lái)會(huì)對(duì) flink 慢慢進(jìn)行深入的了解辙培。當(dāng)然,純屬于個(gè)人隨記邢锯,有理解偏差的地方扬蕊,還請(qǐng)不吝指正。