在 flink-conf.yaml 中添加了一个参数:
env.java.opts.taskmanager: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=51005"
然后我在本地主机上使用以下命令启动了一个作业管理器和一个任务管理器:
flink-1.9.1_bin/bin/jobmanager.sh start
flink-1.9.1_bin/bin/taskmanager.sh start
Jobmanager 运行,我可以在 localhost:8081 上看到 flink UI 仪表板。任务管理器等待 51001 端口上的连接。它在我从 IDE(IntelliJ) 调试代码后运行,该代码已在 localhost:51001 上设置了远程调试。当我从 IDE 开始调试时,我可以看到任务槽已添加。之后我运行了以下命令:
flink-1.9.1_bin/bin/flink run -c myapp.Main myapp.jar
我期待调试点出现在 IDE 中的本地代码中,但它没有出现。我的代码直接进入运行状态,我可以在 flink UI 仪表板中进行操作。
我可以对普通的java项目进行远程调试,但不能对flink作业进行远程调试。
myapp.jar 中的 mainClass 代表作业定义,并在调用 bin/flink run 时执行。要启用远程调试,请将 JVM 选项添加到 bin/flink 脚本中。
如果要调试作业中的数据流,请包含 TaskManager 的 JVM 选项,并向反序列化器或其他负责在作业接收输入时处理数据的代码添加断点。