坚持三叉戟DRPC喷口的国家

时间:2016-01-07 13:59:29

标签: clojure apache-storm trident

我正在试验Storm和Trident这个项目,我正在使用Clojure和Marceline这样做。我正在尝试扩展the Marceline page上给出的wordcount示例,这样句子喷口来自DRPC调用,而不是来自本地喷口。我遇到的问题源于DRPC流需要返回客户端的事实,但我希望DRPC调用能够有效地返回null,并简单地更新持久数据。

(defn build-topology
  ([]
   (let [trident-topology (TridentTopology.)]
     (let [
           ;; ### Two alternatives here ###
           ;collect-stream (t/new-stream trident-topology "words" (mk-fixed-batch-spout 3))
            collect-stream (t/drpc-stream trident-topology "words")
          ]
          (-> collect-stream
              (t/group-by ["args"])
              (t/persistent-aggregate (MemoryMapState$Factory.)
                                      ["args"]
                                      count-words
                                      ["count"]))
          (.build trident-topology)))))

代码中有两种替代方案 - 使用固定批量喷口加载没有问题,但是当我尝试使用DRPC流加载代码时,我收到此错误:

InvalidTopologyException(msg:Component: [b-2] subscribes from non-existent component [$mastercoord-bg0])

我认为这个错误来自于DRPC流必须尝试订阅输出才能返回客户端 - 但persistent-aggregate不提供任何此类输出来订阅

那么如何设置我的拓扑以便DRPC流导致我的持久数据被更新?

次要更新:看起来可能无法实现:{https://issues.apache.org/jira/browse/STORM-38

0 个答案:

没有答案