消除风暴拓扑后清理资源

时间:2019-03-06 14:01:39

标签: apache-storm apache-storm-topology

我们有一个与MariaDB数据库交互的风暴拓扑。我们的Bolts实现了IRichBolt接口并覆盖了生命周期方法。我们使用prepare方法打开数据库连接,并使用cleanup方法关闭数据库连接。 cleanup方法文档说:

  

在将要关闭IBolt时调用。没有保证将调用清除,因为主管在群集上杀死-9的工作进程。   保证将调用清理的一种情况是在本地模式下运行Storm时拓扑被杀死

kill -9命令可在不清除任何资源的情况下终止该进程。因此,我们得出的结论是,在终止拓扑时,不必调用cleanup方法并关闭数据库连接。

因此,前进到我的问题,我们有一个用于拓扑部署的shell脚本,该脚本在执行时会杀死超时为0的当前拓扑并部署新的拓扑。在数据库级别,我们面临着一个问题,那就是有许多打开的连接,这提示我们以前的连接没有关闭。 (在上一个拓扑中打开的那个。)

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

1 个答案:

答案 0 :(得分:0)

不。增加拓扑超时不会影响您的工作人员必须清理的时间。当您使用例如一个30秒的超时时间,它将关闭喷口,并给其余的拓扑结构30秒以完成处理。

您想要的是增加Storm允许工人在强行杀死之前花费关闭时间的时间。 https://github.com/apache/storm/blob/b07413670fa62fec077c92cb78fc711c3bda820c/storm-server/src/main/java/org/apache/storm/DaemonConfig.java#L780选项允许您指定Storm在发送kill -9之前要等待多长时间。默认值为3秒。您需要在storm.yaml中设置此选项,在拓扑配置中进行设置将无效。