如何调试Flink源码

发布时间:2019-11-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了如何调试Flink源码脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

原文地址:如何调试Flink源码
最近在基于flink做实时计算平台,准备写博客记录一些日常的工作。
本篇主要是记一下如何调试Flink码,以Standalone模式为例

环境

Flink Standalone cluster环境的搭建看官方文档即可,这里不再赘述,我们讲下本地环境的准备:
IDE: IntelliJ IDEA (需安装Scala plugin 及 sdk)
java version: 1.8.0_92
flink version 1.5.4

打开ide导入工程后如下:

如何调试Flink源码

源码调试

通过单测代码调试

调试源码,最简单的莫过于通过单测代码,每个module下都有对应的test代码,这种方式最简单,但是毕竟是模拟的。

远程调试

首先,要启用远程调试,我们需要添加一段jvm启动参数,这个参数我们可以通过下图中找到

如何调试Flink源码

即 -agentlib:jdwp=transport=dt_socket,server=y,susPEnd=n,address=5005
其中端口号根据时间情况而定,如果要从启动方法里开始调试,则需要设置suspend=y

那么这段启动参数需要添加到flink那个地方呢?

我们先从启动脚本看,从start-cluster.sh找到config.sh,我们可以发现flink会将如下3个配置项添加到指定的jvm启动参数中:

如何调试Flink源码

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将会出现端口占用冲突。

在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中的步骤如下:

如何调试Flink源码

如何调试Flink源码

如何调试Flink源码

如何调试Flink源码

最后standalone cluster模式,
jobmanager的入口类是org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint,
taskmanager的入口类是org.apache.flink.runtime.taskexecutor.TaskManagerRunner,
找到main方法打上断点就可以开始调试了。

脚本宝典总结

以上是脚本宝典为你收集整理的如何调试Flink源码全部内容,希望文章能够帮你解决如何调试Flink源码所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。