如何在clojure中为暴风螺栓设置`setNumTasks`?

时间:2016-04-24 17:39:34

标签: clojure apache-storm

我想在我的风暴拓扑中设置螺栓的任务数量。但我找不到办法在clojure中做到这一点。我没有在bolt-spec中看到文档中的任何内容。我错过了什么吗?为了微调我的应用程序,我需要一种方法来设置任务数量。这可能吗?

[1]:http://storm.apache.org/releases/0.10.0/Clojure-DSL.html

2 个答案:

答案 0 :(得分:1)

我相信在调用bolt规范时可以在配置图中传递拓扑任务的数量,如

(bolt-spec {"1" :shuffle} geocode-lookup :p 8 :conf {TOPOLOGY_TASKS 64})

以下是拓扑示例:

(defn heatmap-topology []
  (topology
   {"1" (spout-spec checkins :p 4)}

   {"2" (bolt-spec {"1" :shuffle} geocode-lookup :p 8 :conf {TOPOLOGY_TASKS 64})
    "3" (bolt-spec {"2" :shuffle} time-interval-extractor :p 4)
    "4" (bolt-spec {"3" ["time-interval" "city"]} heatmap-builder :p 4)
    "5" (bolt-spec {"4" :shuffle} persistor :conf {TOPOLOGY_TASKS 4})}))

我太想知道同样的事了,发现了这个:

  1. org.apache.storm.clojure/bolt-specorg.apache.storm.thrift/mk-bolt-spec link
  2. 的别名
  3. bolt-spec是使用org.apache.storm.util/defnk link定义的,因此会返回{:obj bolt :inputs inputs :p parallelism-hint :conf conf}这样的地图,其中conf默认为nil
  4. org.apache.storm.clojure/bolt-specorg.apache.storm.thrift/mk-topology的别名,并调用org.apache.storm.topology.TopologyBuilder.addConfigurations作为唯一参数传递conflink
  5. 此外,setNumTasks简单来电addConfiguration(Config.TOPOLOGY_TASKS, val) link
  6. 最后,设置螺栓喷口任务数的正确常量是TOPOLOGY_TASKS link

答案 1 :(得分:-1)

根据Clojure-DSL页面:

  

要创建拓扑配置,最简单的方法是使用   1. Rc8 Rxc8 {[%emt 0:00:01]} 2. Rxc8 {[%emt 0:00:01]} Qxc8 {} 3. Qe7# 1-0命名空间,它定义了所有的常量   可能的配置。常量与静态常量相同   在Config类中,除了破折号而不是下划线。对于   例如,这是一个拓扑配置,用于设置工作人员数量   15并在调试模式下配置拓扑:

backtype.storm.config

从Storm文档(查找名为“任务数”的部分):

  

任务数量

     
      
  • 描述:每个组件要创建多少个任务。
  •   
  • 配置选项:{TOPOLOGY-DEBUG true TOPOLOGY-WORKERS 15}
  •   
  • 如何设置代码(示例):

         

    TOPOLOGY_TASKS

  •   
     

以下是在实践中显示这些设置的示例代码段:

ComponentConfigurationDeclarer#setNumTasks()

看起来使用topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2) .setNumTasks(4) .shuffleGrouping("blue-spout"); 命名空间,定义backtype.storm.config等同于调用TOPOLOGY-WORKERS