首页 > 解决方案 > 如何在运行时/不重新启动时将 jar 文件添加到 Apache Storm EXTLIB?

问题描述

我想在运行时将新逻辑添加到 Apache Storm 的新 jar 文件中。用新 jars 喂它的方法是将它们复制到它的 extlib。问题是当暴风雨运行时,这个库中的 jar 被它锁定并且没有加载新的 jar。似乎它在加载时读取 jar 类并且无法在运行时重新读取它们。谁能给我一个关于如何在运行时向 Storm 添加新 jar 的提示?

标签: javajarjvmapache-storm

解决方案


人们通常这样做的方式是将依赖项与拓扑 jar 捆绑在一起,例如使用 maven-shade-plugin。这样,您就可以在将新依赖版本推送到生产之前运行您拥有的任何单元或集成测试。如果您要更新代码,我更愿意这样做。

如果您正在更新资源包,或者您不想执行我上面描述的操作,我相信您可以使用 blobstore 功能来替换 jars(虽然还没有测试过)。Storm 允许您将 blob 上传到集群,然后可以将其作为依赖项添加到拓扑中。如果您将依赖项作为 blob 上传到集群,您可以告诉 Storm 在更新 blob 时重新启动您的工作程序。

您可以使用storm blobstore create --file your-plugin.jar --acl o::rwa --replication-factor 1 plugin1.

然后,您将通过执行类似的操作来提交您的拓扑storm jar your-topology.jar com.yourcompany.Topology -c topology.blobstore.map='{"plugin1":{"localname":"plugin1-blob", "uncompress":false, "workerRestart":true}}'

当你想要更新your-plugin.jar时,你就去做storm blobstore update --file your-updated-plugin.jar plugin1。这应该会导致 Storm 上传新版本的 jar,然后重新启动所有拓扑工作者。

在https://storm.apache.org/releases/2.0.0-SNAPSHOT/distcache-blobstore.html上查看有关 blob 存储的更多文档,在https://github.com/apache/storm/topology.blobstore.map上查看有关设置的文档blob/v2.0.0/storm-client/src/jvm/org/apache/storm/Config.java#L110


推荐阅读