在为这个问题苦苦挣扎了很长时间之后,在 Heron 开发人员的帮助下,我终于找到了答案(向他们致敬)。答案是远程调试 jvm 进程。
Heron 文档中添加了故障排除部分(请参阅此页面上的调试 Java 拓扑),提供远程调试 heron 所需的说明。这很好,但不是我需要的,因为它仅用于调试实例(螺栓/喷嘴......)。但我需要调试调度器、启动器等核心部分。
要为 heron 启用完整的远程调试,您应该在execute.py(可以在heron/tools/cli/src/python中找到)文件中添加第二行:
java_opts = ['-D' + opt for opt in java_defines]
//add this line here
java_opts.append('-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005')
地址:您在 IDE 中配置的端口。
暂停:y 表示暂停执行,直到客户端(调试器或 IDE)连接到服务器(jvm 进程)。
您可以在此链接中找到在 Intellij 中设置远程调试的说明。
重要提示:不要忘记重新编译源代码并安装 bin 包。编译安装苍鹭
bazel build --config=ubuntu heron/...
bazel run --config=ubuntu -- scripts/packages:heron-client-install.sh --user
bazel run --config=ubuntu -- scripts/packages:heron-api-install.sh --user --maven
现在将您的检查点放在您想要的任何地方并从终端提交您的拓扑,然后在 IDE 中开始调试,它将带您到检查点。只需记住在执行路径中添加检查点,SubmitterMain 或 SchedulerMain 可能是不错的选择。