原文地址:如何调试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方法打上断点就能够开始调试了。