1

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

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

kill -9命令会在不清理任何资源的情况下终止该进程。所以我们得出这样的结论,即在终止拓扑时,没有必要cleanup调用该方法并关闭数据库连接。

所以继续我的问题,我们有一个用于拓扑部署的 shell 脚本,它在执行时会以 0 的超时时间终止当前拓扑并部署一个新的拓扑。我们在数据库级别面临一个问题,即打开了许多连接,这提示我们以前的连接没有关闭。(在上一个拓扑中打开的那个)。

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

4

1 回答 1

2

不会。增加拓扑超时不会影响您的工作人员必须清理多长时间。例如,当您使用 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,在拓扑配置中设置将不起作用。

于 2019-03-06T14:36:57.987 回答