我们有一个与MariaDB数据库交互的风暴拓扑。我们的螺栓实现了IRichBolt接口并覆盖了生命周期方法。我们在prepare方法中打开一个db连接,并在cleanup方法中关闭它。cleanup方法文档指出:
当IBolt将被关闭时调用。没有监护人会调用清理,因为主管在集群上杀死了-9的工作人员进程。保证调用清理的一个上下文是在本地模式下运行Storm时终止拓扑。
kill -9命令在不清理任何资源的情况下杀死进程。因此,我们得出这样的结论:在关闭拓扑时,不需要调用cleanup方法并关闭db连接。
因此,接下来要问我的问题,我们有一个用于拓扑部署的shell脚本,该脚本在执行时会以超时0终止当前拓扑,并部署一个新的拓扑。我们在db级别面临一个问题,即有许多连接被打开,这给了我们以前的连接没有关闭的提示。(在前一个拓扑中打开的那个)。
我们的假设正确吗?增加超时会清除所有的资源吗?
发布于 2019-03-06 14:36:57
不是的。增加拓扑超时不会影响员工清理的时间。当您使用例如30秒超时时,这只会关闭喷口,并给出其余的拓扑30秒来完成处理。
你想要的是增加风暴的持续时间,让工人在杀戮前停止工作。https://github.com/apache/storm/blob/b07413670fa62fec077c92cb78fc711c3bda820c/storm-server/src/main/java/org/apache/storm/DaemonConfig.java#L780选项允许您指定风暴在发送kill -9之前将等待多长时间。默认为3秒。您需要在storm.yaml中设置此选项,在拓扑配置中设置它将不会产生任何影响。
https://stackoverflow.com/questions/55024919
复制相似问题