清除风暴拓扑后的资源清理

7fhtutme  于 2021-06-24  发布在  Storm
关注(0)|答案(1)|浏览(393)

我们有一个与mariadb数据库交互的storm拓扑。我们的螺栓实现了 IRichBolt 接口并重写生命周期方法。我们打开了数据库连接 prepare 方法并在 cleanup 方法。这个 cleanup 方法文档说明:
当ibolt要关闭时调用。无法保证将调用cleanup,因为主管在集群上杀死-9的工作进程。保证调用cleanup的一个上下文是在本地模式下运行storm时终止拓扑
以及 kill -9 命令在不清理任何资源的情况下终止进程。所以我们得出这样的结论,在杀死拓扑时,不需要 cleanup 方法并关闭数据库连接。
因此,继续我的问题,我们有一个用于拓扑部署的shell脚本,它在执行时以超时0终止当前拓扑,并部署一个新拓扑。我们在db级别面临一个问题,即有许多连接已打开,这提示我们以前的连接没有关闭(在上一个拓扑中打开的一个)。
我们的假设正确吗?增加超时会清除所有资源吗?

yc0p9oo0

yc0p9oo01#

不会。增加拓扑超时不会影响工作人员清理的时间。当您使用例如30秒超时时,这只会关闭喷口,并给拓扑的其余部分30秒的时间来完成处理。
你想要的是增加风暴允许一个工人在强制杀戮前关闭的时间。这个https://github.com/apache/storm/blob/b07413670fa62fec077c92cb78fc711c3bda820c/storm-server/src/main/java/org/apache/storm/daemonconfig.java#l780 选项允许您指定storm在发送 kill -9 . 默认值为3秒。您需要在中设置此选项 storm.yaml ,在拓扑配置中设置它将不起作用。

相关问题