如何調試Flink源碼

原文地址:如何調試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方法打上斷點就能夠開始調試了。

相關文章
相關標籤/搜索