如何为风暴拓扑提供自定义配置?例如,如果我有一个我构建的拓扑连接到MySQL集群,并且我希望能够更改我需要连接的服务器而无需重新编译,我该怎么做?我的偏好是使用配置文件,但我担心的是文件本身没有部署到集群,因此它不会被运行(除非我对集群如何工作的理解是有缺陷的).到目前为止,我在运行时将配置选项传递到风暴拓扑中的唯一方法是通过命令行参数,但是当您获得大量参数时,这很麻烦.
一个想法确实是利用shell脚本将文件读入变量并将该变量的内容作为字符串传递给拓扑,但是如果可能的话我想要一些更清洁的东西.
有人遇到过这种情况么?如果是这样,你是如何解决的?
编辑:
似乎需要提供更多说明.我的方案是我有一个拓扑,我希望能够在不同的环境中部署,而无需重新编译它.通常情况下,我会创建一个配置文件,其中包含数据库连接参数之类的内容并将其传入.我想知道如何在Storm中执行类似的操作.
您可以指定使用拓扑提交的配置(通常通过yaml文件).我们如何在自己的项目中自行管理,我们有单独的配置文件用于开发,一个用于生产,在其中我们存储我们的服务器,redis和db IP以及Ports等.然后当我们运行命令来构建jar并提交暴露它的拓扑包括正确的配置文件,具体取决于您的部署环境.螺栓和喷口只是从stormConf图中读取它们所需的配置,它将在bolt的prepare()方法中传递给它们.
来自http://storm.apache.org/documentation/Configuration.html:
每个配置都有一个默认值,在Storm代码库中的defaults.yaml中定义.您可以通过在Nimbus的类路径和主管中定义storm.yaml来覆盖这些配置.最后,您可以定义在使用StormSubmitter时随拓扑一起提交的特定于拓扑的配置.但是,拓扑特定的配置只能覆盖前缀为"TOPOLOGY"的配置.
Storm 0.7.0及更高版本允许您在每个螺栓/每个喷嘴的基础上覆盖配置.
您还可以在http://nathanmarz.github.io/storm/doc/backtype/storm/StormSubmitter.html上看到submitJar和submitTopology传递了一个名为conf的地图.
希望这能让你开始.
实际上最适合您的是将配置存储在可变键值存储(s3、redis 等)中,然后将其拉入以配置您随后使用的数据库连接(我假设您已经计划限制如何使用通常,您会与数据库进行对话,因此获取此配置的开销并不是什么大问题)。这种设计允许您即时更改数据库连接,甚至无需重新部署拓扑。
| 归档时间: |
|
| 查看次数: |
15248 次 |
| 最近记录: |