概述
因?yàn)樽约涸陂喿x源碼的過(guò)程中曾經(jīng)遇到過(guò)很多問(wèn)題,現(xiàn)在稍微有一點(diǎn)點(diǎn)的經(jīng)驗(yàn)希望分享給很多從零開(kāi)始的人麻蹋。Apache的項(xiàng)目代碼量很大跛溉,很難做到徹底通讀,我也是一步一步的先從整體的架構(gòu)來(lái)分析扮授。閱讀源碼的好處有很多芳室,在此就不一一贅述。
介紹
首先介紹以下flink刹勃,它是一個(gè)分布式堪侯,高容錯(cuò),能保證每條消息只被處理一次的流處理引擎深夯,也是對(duì)Google Dataflow模型的一個(gè)較好的開(kāi)源實(shí)現(xiàn)抖格,雖然還是有一些不足之處。雖然在runtime中用的是同一個(gè)引擎咕晋,但是卻提供了針對(duì)stream和batch的兩套api,不過(guò)在后續(xù)的更新中應(yīng)該更好地加入了對(duì)sql的支持來(lái)完成統(tǒng)一收奔。
本次解析參考的代碼是flink1.2版本掌呜。
另外Flink是使用Scala和Java混編,關(guān)于Scala和分布式工具包Akka的學(xué)習(xí)資料后續(xù)我會(huì)補(bǔ)充坪哄。
入口
首先是找到入口质蕉。因?yàn)橐粋€(gè)項(xiàng)目中可能有幾個(gè)主函數(shù),而且大數(shù)據(jù)相關(guān)的項(xiàng)目還會(huì)兼容Yarn和Mesos翩肌,入口的話就更多了模暗。在這里我會(huì)用Local模式和Standalone Cluster模式來(lái)講解,一方面對(duì)Yarn和Mesos相關(guān)的背景就不需要怎么介紹(事實(shí)是我還沒(méi)學(xué) : ( ...)念祭,另一方面入門門檻也稍低一些兑宇,還省略了很多代碼可以以后再分析。
要找入口粱坤,那就要去找啟動(dòng)腳本隶糕,建議大家可以稍微學(xué)一下bash瓷产, 不說(shuō)能寫的多好,最起碼能看懂啟動(dòng)腳本就行枚驻。
Flink的啟動(dòng)腳本源碼在flink-dist/src/main/flink-bin/bin文件夾下濒旦,其中有start-cluster和start-local。其中start-local的代碼很簡(jiǎn)單
就是調(diào)用同文件夾下的jobmanager.sh腳本再登,因?yàn)槭潜镜啬J蕉耍暂斎雲(yún)?shù)是local。其中taskmanager的啟動(dòng)時(shí)嵌入在同一個(gè)jvm中锉矢,后面會(huì)做解析。
而start-cluster集群模式下的運(yùn)行就較為復(fù)雜
在這里不會(huì)對(duì)Zookeeper下的高可用模式進(jìn)行介紹沈撞,只介紹普通集群模式慷荔,所以直接參考else后面的語(yǔ)句,同樣是運(yùn)行jobmanager腳本缠俺,只是第二個(gè)命令行參數(shù)變成了cluster显晶。所以接下來(lái)去看jobmanager.sh。jobmanager.sh在對(duì)入?yún)⑦M(jìn)行了一系列判斷之后壹士,會(huì)到以下代碼塊磷雇。
不管是前臺(tái)運(yùn)行還是后臺(tái)運(yùn)行,都會(huì)調(diào)用flink-daemon.sh腳本躏救,下面就是啟動(dòng)腳本的核心唯笙。
在flink中,他會(huì)根據(jù)先前運(yùn)行的腳本調(diào)用daemon腳本盒使,所以需要運(yùn)行的可能不只是jobmanager崩掘,在這兒因?yàn)槲覀兪菑膉obmanager.sh中進(jìn)入daemon,所以需要運(yùn)行的class是org.apache.flink.runtime.jobmanaer.JobManager少办,所以我們看源碼的入口也就在這個(gè)類苞慢。
以下是啟動(dòng)jvm將該類作為主程序的運(yùn)行,其中很多事jvm的啟動(dòng)參數(shù)英妓,不做細(xì)講挽放。
總結(jié)
至此,flink的local與cluster啟動(dòng)腳本應(yīng)該已經(jīng)比較清晰蔓纠,如果想開(kāi)始閱讀源碼的話就從org.apache.flink.runtime.jobmanaer.JobManager這個(gè)類開(kāi)始看起辑畦。因?yàn)閒link中基于akka的部分大部分是使用scala實(shí)現(xiàn),所以建議可以先去看scala文檔腿倚,或者runoob.com的scala入門教程纯出,后續(xù)還可以研讀Scala In Depth這本書。
下一篇解析將探討Flink的總體架構(gòu),與代碼中啟動(dòng)的流程