杀死风暴拓扑后资源清理

问题描述 投票:0回答:1

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

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

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

因此,继续我的问题,我们有一个用于拓扑部署的shell脚本,在执行时会以超时0杀死当前拓扑并部署新拓扑。我们在db级面临一个问题,即打开了许多连接,这给我们提示以前的连接没有关闭。 (在先前拓扑中打开的那个)。

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

apache-storm apache-storm-topology
1个回答
2
投票

不会。增加拓扑超时不会影响工作人员清理的时间。当你使用例如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中设置此选项,在拓扑配置中设置它将无效。

© www.soinside.com 2019 - 2024. All rights reserved.