爲何要編譯flink源碼
用於學習,在IDEA上開發的flink job,能直接在IDEA運行,若是運行時依賴的flink框架是咱們本身編譯構建的,就作到了從業務到框架均可以修改源碼並驗證,起到了很好的學習和動手實踐效果;java
環境信息
- 電腦:2019版13寸MacBook Pro,2.3 GHz 四核Intel Core i5,8 GB 2133 MHz LPDDR3
- 操做系統:macOS Catalina 10.15.3
- JDK:1.8.0_211
- Maven:3.6.0
- IDEA:2018.3.5 (Ultimate Edition)
關於正版IDEA
如何無償使用正版IDEA,能夠參考《免費申請和使用IntelliJ IDEA商業版License指南》程序員
全文概覽
今天的實戰由如下內容組成:apache
- 開發一個最簡單的flink任務,在IDEA上以local模式運行;
- 下載flink1.9.2源碼;
- 修改flink1.9.2源碼,而且編譯構建;
- 設置,讓步驟1中的flink任務用上剛剛編譯的flink1.9.2框架;
- 再次運行flink任務,驗證修改後的flink框架是否生效;
IDEA上運行flink job工程
- 在IDEA上建立flink job的maven工程並運行,請參考《IDEA上運行Flink任務》
- 假設您已按上面的步驟在IDEA建好了flink job工程;
- 運行起來,在瀏覽器打開flink頁面,以下圖,綠框中顯示一共有8個Task Slot:
- 之因此會有8個Task Slot,和下圖紅框中的代碼有關,這是段flink框架源碼(StreamExecutionEnvironment.java),入參parallelism是CPU核數,我這裏是開了超線程的四核i5處理器,因此parallelism等於8:
- 今天的目標就是修改上圖紅框中的源碼,而後在網頁上看是否是生效了(Task Slot數量從8改爲5);
準備工做
- maven中央倉庫地址建議用阿里雲的,不然會常常遇到jar下載超時錯誤,地址:http://192.168.50.43:8081/repository/aliyun-proxy/
- flink1.9.2源碼的maven工程依賴了一箇中央倉庫沒有的jar,GAV是io.confluent:kafka-schema-registry-client:3.3.1,您須要下載下來在本地倉庫作mvn install操做,下載地址:http://packages.confluent.io/maven/io/confluent/kafka-schema-registry-client/3.3.1/kafka-schema-registry-client-3.3.1.jar
- 上述準備工做都須要您在本地maven上操做,可是若是您的條件容許,仍是強烈推薦在內網搭建maven私服nexus3,參考:《羣暉DS218+作maven私服(nexus3)》、《Ubuntu部署和體驗Nexus3》、《Nexus3經常使用功能備忘》
下載flink1.9.2源碼
flink1.9.2源碼的下載地址:http://ftp.jaist.ac.jp/pub/apache/flink/flink-1.9.2/flink-1.9.2-src.tgzapi
修改和編譯構建
- 將下載好的flink-1.9.2-src.tgz解壓,獲得文件夾flink-1.9.2
- 打開這個文件:flink-1.9.2/flink-streaming-java/src/main/java/org/apache/flink/streaming/api/environment/StreamExecutionEnvironment.java
- 以下圖紅框,找到createLocalEnvironment方法,把setParallelism的入參改爲一個固定的數字(每一個Task Slot都要分配內存,因此這個數字請不要改得太大,不然啓動flink就會報錯了,我這裏改爲了5):
- 在文件夾flink-1.9.2下,執行編譯構建的命令:mvn clean install -DskipTests -Dfast
- 經歷漫長等待後提示構建成功:
- 確認這個文件已生成,稍後就要用到:flink-1.9.2/flink-dist/target/flink-dist_2.11-1.9.2.jar
設置
- 爲了用上剛剛構建出來的flink框架jar,要作些設置,打開以前運行的flink job應用,在項目上點擊右鍵,點擊菜單Open Module Settings,以下圖:
- 接下來要作三個和jar有關的操做,注意每一步都很重要:
- 下圖紅框1中的flink-dist_2.11-1.9.2.jar文件,是《IDEA上運行Flink任務》一文中添加的,目的是提供網頁服務,如今將其刪除,操做以下圖紅框所示:
- 下圖紅框1中的maven依賴:org.apache.flink:flink-streaming-java_2.11:1.9.2,也請刪除,操做以下圖紅框所示:
- 點擊下圖紅框中的加號:
- 在彈出的窗口選中剛纔構建好的文件flink-1.9.2/flink-dist/target/flink-dist_2.11-1.9.2.jar:
- 記得點擊右下角的OK按鈕保存,修改完畢,接下來驗證我們修改的flink框架源碼是否生效了
驗證
- 當前flink job工程來自《IDEA上運行Flink任務》一文,StreamingJob的工做是讀取本機18081端口的數據,因此咱們要把18081端口的服務啓動起來,否則StreamingJob運行時是連不上端口的,打開一個控制檯,執行命令:nc -l 18081
- 如今能夠將StreamingJob運行起來,以下圖,右鍵點擊StreamingJob,選擇Run ‘StreamingJob.main()’:便可啓動flink任務:
- 在IDEA的控制檯搜索關鍵字localhost,以下圖紅框,能夠查到flink網頁的端口,我這裏是52704:
- 瀏覽器訪問http://localhost:52704,以下圖紅框,Total Task Slots數量是5,咱們修改的flink1.9.2的源碼生效了:
- 至此,Flink1.9.2的源碼從修改到編譯構建,再到驗證都已經完成了,若是您也在學習flink,但願本文能給您一些參考,一塊兒來動手實戰吧;