原文地址:如何調試Flink源碼
最近在基於flink作實時計算平臺,準備寫博客記錄一些平常的工做。
本篇主要是記一下如何調試Flink的源碼,以Standalone模式爲例。java
Flink Standalone cluster環境的搭建看官方文檔便可,這裏再也不贅述,咱們講下本地環境的準備:
IDE: IntelliJ IDEA (需安裝Scala plugin 及 sdk)
java version: 1.8.0_92
flink version 1.5.4apache
打開ide導入工程後以下:jvm
調試源碼,最簡單的莫過於經過單測代碼,每一個module下都有對應的test代碼,這種方式最簡單,可是畢竟是模擬的。socket
首先,要啓用遠程調試,咱們須要添加一段jvm啓動參數,這個參數咱們能夠經過下圖中找到ide
即 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
其中端口號根據時間狀況而定,若是要從啓動方法裏開始調試,則須要設置suspend=yidea
那麼這段啓動參數須要添加到flink那個地方呢?spa
咱們先從啓動腳本看,從start-cluster.sh找到config.sh,咱們能夠發現flink會將以下3個配置項添加到指定的jvm啓動參數中:debug
env.java.opts: jar包啓動時添加的參數,適用於jobmanager和taskmanager;
env.java.opts.jobmanager: jobmanager的啓動參數;
env.java.opts.taskmanager: taskmanager的啓動參數;調試
這3個配置咱們都可以在flink-conf.yaml中配置,而咱們的遠程調試參數應當配置到後二者,而且使用不一樣的端口,
若是配置在env.java.opts中,啓動jobmanager和taskmanager將會出現端口占用衝突。server
在flink-conf.yaml中添加:
env.java.opts.jobmanager: -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
env.java.opts.taskmanager: -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5006
而後啓動集羣
./start-cluster.sh
以後在idea中的步驟以下:
最後standalone cluster模式,jobmanager的入口類是org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint,taskmanager的入口類是org.apache.flink.runtime.taskexecutor.TaskManagerRunner,找到main方法打上斷點就能夠開始調試了。