1. 程式人生 > >Flink1.9.2原始碼編譯和使用

Flink1.9.2原始碼編譯和使用

### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ### 為什麼要編譯flink原始碼 用於學習,在IDEA上開發的flink job,能直接在IDEA執行,如果執行時依賴的flink框架是我們自己編譯構建的,就做到了從業務到框架都可以修改原始碼並驗證,起到了很好的學習和動手實踐效果; ### 環境資訊 1. 電腦:2019版13寸MacBook Pro,2.3 GHz 四核Intel Core i5,8 GB 2133 MHz LPDDR3 2. 作業系統:macOS Catalina 10.15.3 3. JDK:1.8.0_211 4. Maven:3.6.0 5. IDEA:2018.3.5 (Ultimate Edition) ### 關於正版IDEA 如何免費使用正版IDEA,可以參考[《免費申請和使用IntelliJ IDEA商業版License指南》](https://xinchen.blog.csdn.net/article/details/100014835) ### 全文概覽 今天的實戰由以下內容組成: 1. 開發一個最簡單的flink任務,在IDEA上以local模式執行; 2. 下載flink1.9.2原始碼; 3. 修改flink1.9.2原始碼,並且編譯構建; 4. 設定,讓步驟1中的flink任務用上剛剛編譯的flink1.9.2框架; 5. 再次執行flink任務,驗證修改後的flink框架是否生效; ### IDEA上執行flink job工程 1. 在IDEA上建立flink job的maven工程並執行,請參考[《IDEA上執行Flink任務》](https://blog.csdn.net/boling_cavalry/article/details/105459630) 2. 假設您已按上面的步驟在IDEA建好了flink job工程; 3. 執行起來,在瀏覽器開啟flink頁面,如下圖,綠框中顯示一共有8個Task Slot: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201029145631544-1775719929.png) 4. 之所以會有8個Task Slot,和下圖紅框中的程式碼有關,這是段flink框架原始碼(StreamExecutionEnvironment.java),入參parallelism是CPU核數,我這裡是開了超執行緒的四核i5處理器,所以parallelism等於8: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201029145632368-320577172.png) 5. 今天的目標就是修改上圖紅框中的原始碼,然後在網頁上看是不是生效了(Task Slot數量從8改成5); ### 準備工作 1. maven中央倉庫地址建議用阿里雲的,否則會經常遇到jar下載超時錯誤,地址:http://192.168.50.43:8081/repository/aliyun-proxy/ 2. 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 3. 上述準備工作都需要您在本地maven上操作,但是如果您的條件允許,還是強烈推薦在內網搭建maven私服nexus3,參考:[《群暉DS218+做maven私服(nexus3)》](https://blog.csdn.net/boling_cavalry/article/details/105458466)、[《Ubuntu部署和體驗Nexus3》](https://xinchen.blog.csdn.net/article/details/104617262)、[《Nexus3常用功能備忘》](https://blog.csdn.net/boling_cavalry/article/details/105458882) ### 下載flink1.9.2原始碼 flink1.9.2原始碼的下載地址:http://ftp.jaist.ac.jp/pub/apache/flink/flink-1.9.2/flink-1.9.2-src.tgz ### 修改和編譯構建 1. 將下載好的flink-1.9.2-src.tgz解壓,得到資料夾flink-1.9.2 2. 開啟這個檔案:flink-1.9.2/flink-streaming-java/src/main/java/org/apache/flink/streaming/api/environment/StreamExecutionEnvironment.java 3. 如下圖紅框,找到createLocalEnvironment方法,把setParallelism的入參改成一個固定的數字(每個Task Slot都要分配記憶體,所以這個數字請不要改得太大,否則啟動flink就會報錯了,我這裡改成了5): ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201029145633397-1182715179.png) 4. 在資料夾flink-1.9.2下,執行編譯構建的命令:mvn clean install -DskipTests -Dfast 5. 經歷漫長等待後提示構建成功: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201029145633873-1586467123.png) 6. 確認這個檔案已生成,稍後就要用到:flink-1.9.2/flink-dist/target/flink-dist_2.11-1.9.2.jar ### 設定 1. 為了用上剛剛構建出來的flink框架jar,要做些設定,開啟之前執行的flink job應用,在專案上點選右鍵,點選選單Open Module Settings,如下圖: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201029145634462-479063468.png) 2. 接下來要做三個和jar有關的操作,注意每一步都很重要: 3. 下圖紅框1中的flink-dist_2.11-1.9.2.jar檔案,是[《IDEA上執行Flink任務》](https://blog.csdn.net/boling_cavalry/article/details/105459630)一文中新增的,目的是提供網頁服務,現在將其刪除,操作如下圖紅框所示: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201029145635035-1049731234.png) 4. 下圖紅框1中的maven依賴:org.apache.flink:flink-streaming-java_2.11:1.9.2,也請刪除,操作如下圖紅框所示: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201029145635541-79689191.png) 5. 點選下圖紅框中的加號: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201029145635990-1243611383.png) 6. 在彈出的視窗選中剛才構建好的檔案flink-1.9.2/flink-dist/target/flink-dist_2.11-1.9.2.jar: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201029145637014-1349660133.png) 7. 記得點選右下角的OK按鈕儲存,修改完畢,接下來驗證咱們修改的flink框架原始碼是否生效了 ### 驗證 1. 當前flink job工程來自[《IDEA上執行Flink任務》](https://blog.csdn.net/boling_cavalry/article/details/105459630)一文,StreamingJob的工作是讀取本機18081埠的資料,所以我們要把18081埠的服務啟動起來,不然StreamingJob執行時是連不上埠的,開啟一個控制檯,執行命令:nc -l 18081 2. 現在可以將StreamingJob執行起來,如下圖,右鍵點選StreamingJob,選擇Run 'StreamingJob.main()':即可啟動flink任務: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201029145637687-1456067771.png) 3. 在IDEA的控制檯搜尋關鍵字localhost,如下圖紅框,可以查到flink網頁的埠,我這裡是52704: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201029145640319-44261192.png) 4. 瀏覽器訪問http://localhost:52704,如下圖紅框,Total Task Slots數量是5,我們修改的flink1.9.2的原始碼生效了: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201029145641473-1104600933.png) 5. 至此,Flink1.9.2的原始碼從修改到編譯構建,再到驗證都已經完成了,如果您也在學習flink,希望本文能給您一些參考,一起來動手實戰吧; ### 歡迎關注公眾號:程式設計師欣宸 > 微信搜尋「程式設計師欣宸」,我是欣宸,期待與您一同暢遊Java世界... [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blo