如何在运行时/不重新启动时将jar文件添加到apache storm extlib?

7cjasjjr  于 2021-06-24  发布在  Storm
关注(0)|答案(1)|浏览(268)

我想在apachestorm运行时在新jar文件中添加新逻辑。向它提供新jar的方法是将它们复制到extlib中。问题是,当ever storm运行时,这个库中的jar被它锁定,并且没有加载新的jar。它似乎在加载时读取jar类,而在运行时无法重新读取它们。有人能给我一个关于如何在运行时向storm添加新jar的提示吗?

r3i60tvu

r3i60tvu1#

人们通常这样做的方式是将依赖项与拓扑jar捆绑在一起,例如使用maven shade插件。这样,在将新的依赖关系版本推向生产之前,就可以运行任何单元测试或集成测试。如果你正在更新代码,我更喜欢这样做。
如果您正在更新资源包,或者您不想执行我上面描述的操作,我相信您可以使用blobstore功能来替换jar(尽管尚未测试)。storm允许您将blob上载到集群,然后可以将其作为依赖项添加到拓扑中。如果将依赖项作为blob上载到集群,则可以告诉storm在更新blob时重新启动worker。
您可以使用 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的新版本,然后重新启动所有拓扑工作程序。
有关blob商店的更多文档,请参见https://storm.apache.org/releases/2.0.0-snapshot/distcache-blobstore.html,以及 topology.blobstore.map 设置为https://github.com/apache/storm/blob/v2.0.0/storm-client/src/jvm/org/apache/storm/config.java#l110

相关问题