将拓扑部署到不同的远程集群?

Pet*_*ves 6 apache-storm

我正在开发风暴拓扑(storm-project.net).我有2个远程集群:分段和生产.

我在客户端(我编写代码的笔记本电脑)上有两个storm.yaml文件,指向不同的远程集群,production.storm.yaml和staging.storm.yaml.

不幸的是,我知道在它们之间切换的唯一方法是在通过"storm jar"命令远程部署拓扑之前将符号链接更改为〜/ .storm/storm.yaml.这很容易出错,并且会在项目源代码树中创建依赖于客户端文件树中相当任意位置的内容.

一定有更好的方法."storm list --config staging.storm.yaml"会给我关于登台集群的信息,但我找不到一个类似的标志来设置conf文件与"storm jar".或者也许我可以设置一个像"STORM_HOME"这样的环境变量?

P. *_*etz 9

您不需要维护单独的.yaml文件.您可以nimbus.host使用-c命令行选项覆盖配置:

storm jar -c nimbus.host=nimbus.example.com my-storm-jar.jar com.example.MyTopology
Run Code Online (Sandbox Code Playgroud)


Joh*_*ore 2

我也有同样的问题。我所做的是编写一个 Makefile 来部署我的 Storm 拓扑。不同的目标会创建不同的符号链接。就像是:

export STORM_PATH=/opt/storm
export PROJECT_PATH=/project/path

compile:
    cd $(PROJECT_PATH)
    mvn compile

package:
    cd $(PROJECT_PATH)
    mvn package

deploy-staging: package
    ln -s $(STORM_PATH)/conf/staging.storm.yaml $(STORM_PATH)/conf/storm.yaml
    storm jar $(PROJECT_PATH)/target/project.jar my.project.Topology myTopology

deploy-production: package
    ln -s $(STORM_PATH)/conf/production.storm.yaml $(STORM_PATH)/conf/storm.yaml
    storm jar $(PROJECT_PATH)/target/project.jar my.project.Topology myTopology
Run Code Online (Sandbox Code Playgroud)

因此,要将拓扑部署到生产中,您可以执行以下操作:

make deploy-production
Run Code Online (Sandbox Code Playgroud)

舞台表演也是如此。您将看到拓扑也已打包(如果您使用 Maven)。您还可以将不同的 yaml 文件作为存储库的一部分,并让符号链接指向您的存储库。或者,您可以将 yaml 文件放在部署计算机上,并且它们对于不同的部署可能有所不同。总是用同一个名字。