Apache storm 清除storm拓扑后的资源清理

Apache storm 清除storm拓扑后的资源清理,apache-storm,apache-storm-topology,Apache Storm,Apache Storm Topology,我们有一个与MariaDB数据库交互的storm拓扑。我们的螺栓实现了IRichBolt接口并覆盖了生命周期方法。我们在prepare方法中打开一个db连接,然后在cleanup方法中关闭它。 cleanup方法文档说明: 在IBolt即将关闭时调用。无法保证将调用cleanup,因为主管会在集群上杀死-9的工作进程。 保证调用cleanup的一个上下文是在本地模式下运行Storm时终止拓扑 并且kill-9命令在不清理任何资源的情况下终止进程。因此,我们得出这样的结论:在终止拓扑时,不必调用c

我们有一个与MariaDB数据库交互的storm拓扑。我们的螺栓实现了
IRichBolt
接口并覆盖了生命周期方法。我们在
prepare
方法中打开一个db连接,然后在
cleanup
方法中关闭它。
cleanup
方法文档说明:

在IBolt即将关闭时调用。无法保证将调用cleanup,因为主管会在集群上杀死-9的工作进程。 保证调用cleanup的一个上下文是在本地模式下运行Storm时终止拓扑

并且
kill-9
命令在不清理任何资源的情况下终止进程。因此,我们得出这样的结论:在终止拓扑时,不必调用
cleanup
方法,db连接也将关闭

因此,继续我的问题,我们有一个用于拓扑部署的shell脚本,当执行该脚本时,会在超时为0的情况下终止当前拓扑,并部署一个新拓扑。我们在db级别面临一个问题,即有许多连接打开,这提示我们以前的连接没有关闭。(在上一拓扑中打开的拓扑)


我们的假设正确吗?增加超时是否会清理所有资源?

否。增加拓扑超时不会影响工作人员清理的时间。当您使用例如30秒超时时,这只会关闭喷口,并给拓扑的其余部分30秒的时间来完成处理


你们想要的是增加风暴允许工人在强制杀戮之前关闭的时间。该选项允许您指定Storm在发送
kill-9
之前等待的时间。默认值为3秒。您需要在
storm.yaml
中设置此选项,在拓扑配置中设置此选项将无效

hi stig,当执行
storm kill
命令时,它是否调用螺栓上的
cleanup
方法?如果没有,我们如何才能在关闭前清理资源,如OpenDB连接。当我们终止拓扑时,db上连接的
线程数没有减少,这使我们相信它不会在关机时关闭连接。对不起,我错了。当工作程序关闭时,Storm会调用清理,但它也只允许工作程序花1秒时间关闭(关闭挂钩有1秒时间运行,然后关闭运行时)。依我看,我们可以在这里设置延迟。请随时就此提出问题。如果你想处理它,请看一下。那么这意味着,在1秒内,如果数据库连接没有关闭,它将保持打开状态。这并不能完全确保所有资源都已清理