2015-11-20 86 views
1

如何從風暴三叉戟中的同一個螺栓發射到多個流?在風暴三叉戟中發射到多個流

我有一個螺栓,它做了一些計算,並根據結果我想傳遞一些值到一個流,其他值到另一個流。

風暴(不三叉戟),我們可以做到這一點通過如下:

斯普利特流分成多個流:

@Override 
public void declareOutputFields(final OutputFieldsDeclarer outputFieldsDeclarer) { 
    outputFieldsDeclarer.declareStream("type1-stream", new Fields("type1")); 
    outputFieldsDeclarer.declareStream("type2-stream", new Fields("type2")); 
    outputFieldsDeclarer.declareStream("error-stream", new Fields("error")); 
} 

然後根據調查結果發出,如:

collector.emit("type1-stream", new Values("type 1 data")); 
collector.emit("type2-stream", new Values("type 2 data")); 
collector.emit("error-stream", new Values("error data")); 

然後通過收聽預期流來完成剩下的工作:

builder.setBolt("errorBolt", errorBolt).shuffleGrouping("errorBoltStream", "error-stream"); 
builder.setBolt("type1Bolt", type1Bolt).shuffleGrouping("type1BoltStream", "type1-stream"); 

那麼,如何使用Storm Trident實現相同的行爲?

一個選擇是基於鍵調用「每個」爲同流,並運行相同的螺栓上只能發出基於我想發出這樣的流,或另一種選擇是發出鍵值對和過濾信息流(如type1,type2,錯誤等),並再次創建多個流。但他們中沒有一個在我看來是一個好設計。什麼是實現它的最好方法?

+0

我有同樣的問題。這有一個問題:https://issues.apache.org/jira/browse/STORM-68 –

回答

0

AFAIK,你不能那樣做。 若要拆分流,您將需要執行以下操作:

// main stream 
Stream stream = topology.each(...) 

// stream 01 
Stream stream1 = stream.each(...) 

// stream 02 
Stream stream2 = stream.each(...)