我们有一个与MariaDB数据库交互的风暴拓扑。我们的Bolts实现了IRichBolt
接口并覆盖了生命周期方法。我们使用prepare
方法打开数据库连接,并使用cleanup
方法关闭数据库连接。
cleanup
方法文档说:
在将要关闭IBolt时调用。没有保证将调用清除,因为主管在群集上杀死-9的工作进程。 保证将调用清理的一种情况是在本地模式下运行Storm时拓扑被杀死
kill -9
命令可在不清除任何资源的情况下终止该进程。因此,我们得出的结论是,在终止拓扑时,不必调用cleanup
方法并关闭数据库连接。
因此,前进到我的问题,我们有一个用于拓扑部署的shell脚本,该脚本在执行时会杀死超时为0的当前拓扑并部署新的拓扑。在数据库级别,我们面临着一个问题,那就是有许多打开的连接,这提示我们以前的连接没有关闭。 (在上一个拓扑中打开的那个。)
我们的假设正确吗?增加超时会清除所有资源吗?
答案 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
中设置此选项,在拓扑配置中进行设置将无效。