Clojure 三叉戟中DRPC喷口的持续状态
我正在为这个项目试验Storm和Trident,我正在使用Clojure和Marceline。我试图扩展上给出的wordcount示例,这样句子spout来自DRPC调用,而不是来自本地spout。我遇到了一些问题,我认为这是因为DRPC流需要有一个结果才能返回到客户端,但是我希望DRPC调用能够有效地返回null,并简单地更新持久化数据Clojure 三叉戟中DRPC喷口的持续状态,clojure,apache-storm,trident,Clojure,Apache Storm,Trident,我正在为这个项目试验Storm和Trident,我正在使用Clojure和Marceline。我试图扩展上给出的wordcount示例,这样句子spout来自DRPC调用,而不是来自本地spout。我遇到了一些问题,我认为这是因为DRPC流需要有一个结果才能返回到客户端,但是我希望DRPC调用能够有效地返回null,并简单地更新持久化数据 (defn build-topology ([] (let [trident-topology (TridentTopology.)] (
(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流导致我的持久化数据被更新
次要更新:看起来这可能不可能:(