终止风暴拓扑后资源清理
Resource clean up after killing storm topology
我们有一个与 MariaDB 数据库交互的风暴拓扑。我们的 Bolt 实现了 IRichBolt
接口并覆盖了生命周期方法。我们在 prepare
方法中打开一个数据库连接,并在 cleanup
方法中关闭它。
cleanup
方法文档说:
Called when an IBolt is going to be shutdown. There is no guarentee that cleanup will be called, because the supervisor kill -9's worker processes on the cluster.
The one context where cleanup is guaranteed to be called is when a topology is killed when running Storm in local mode
而 kill -9
命令会在不清理任何资源的情况下终止进程。所以我们得出这样的结论,即在终止拓扑时,没有必要调用 cleanup
方法并关闭数据库连接。
所以继续我的问题,我们有一个用于拓扑部署的 shell 脚本,执行时会终止当前拓扑,超时为 0,并部署一个新拓扑。我们在数据库级别面临一个问题,即打开了许多连接,这提示我们之前的连接未关闭。 (上一个拓扑中打开的那个)。
我们的假设是否正确?增加超时会清理所有资源吗?
没有。增加拓扑超时不会影响您的工作人员必须清理的时间。当你使用例如一个 30 秒的超时,它只是关闭 spout 并给拓扑的其余部分 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
中设置该选项,在拓扑配置中设置不会有任何效果。
我们有一个与 MariaDB 数据库交互的风暴拓扑。我们的 Bolt 实现了 IRichBolt
接口并覆盖了生命周期方法。我们在 prepare
方法中打开一个数据库连接,并在 cleanup
方法中关闭它。
cleanup
方法文档说:
Called when an IBolt is going to be shutdown. There is no guarentee that cleanup will be called, because the supervisor kill -9's worker processes on the cluster. The one context where cleanup is guaranteed to be called is when a topology is killed when running Storm in local mode
而 kill -9
命令会在不清理任何资源的情况下终止进程。所以我们得出这样的结论,即在终止拓扑时,没有必要调用 cleanup
方法并关闭数据库连接。
所以继续我的问题,我们有一个用于拓扑部署的 shell 脚本,执行时会终止当前拓扑,超时为 0,并部署一个新拓扑。我们在数据库级别面临一个问题,即打开了许多连接,这提示我们之前的连接未关闭。 (上一个拓扑中打开的那个)。
我们的假设是否正确?增加超时会清理所有资源吗?
没有。增加拓扑超时不会影响您的工作人员必须清理的时间。当你使用例如一个 30 秒的超时,它只是关闭 spout 并给拓扑的其余部分 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
中设置该选项,在拓扑配置中设置不会有任何效果。