2015-01-05 63 views
2

所以我試圖配置我的噴口從Amazon SQS隊列中讀取。現在,我想要一個可以分擔多個噴口的負載的情況。阿帕奇風暴 - 使用多個噴口?

我明白它可能有多個線程,但我可以具有由相同的隊列讀取併發射到相同的拓撲結構的兩個或更多個不同的噴口實例/應用程序?例如。噴口A和噴口B從SQS讀取,然後都發射到螺栓C?

回答

3

當然,你可以有多個出水口,但你必須相應地定義它們,以避免重複相同元素的提交(或您的拓撲不接受設計)。例如,同一元素的多個進程意味着不好的計數器。

檢查風暴併發爲每個噴出/螺栓執行人(線程)和任務(實例)開始,然後選擇你想要的號碼。

在你的代碼中,你必須確定你不會管理相同的元組兩次或多次,要麼在暴風雨前做一個隊列(一個隊列不接受相同的元素兩次,處理/清空例如許多噴嘴或多個隊列 - 每個噴嘴一個,提防交易),或者你在風暴中執行(在一個噴口中只用x參數處理消息,在另一個噴口中處理消息,並且消息不能是x和y相同時間)。

+0

謝謝。風暴不是在集羣基礎上工作的嗎?也就是說,如果ip x.x.x.A的實例運行Storm,它會同時運行Spouts和Bolts?必須是分散這個的一種方式? – SarthakDev

+0

@SarthakDev是的。風暴決定哪個螺栓/噴口去哪個工人。你不能明確地設置它。 AFAIK它使用模塊散列函數來分配羣集工作人員中的螺栓/噴口的任務(實例)。它有時是不平衡的(你可以在Storm UI中查看),所以你擁有的工作人員越多,你可以平均分配負載越好,例如你可以決定每個硬件擁有多於1個工作者,以防止有點不平衡。 – zenbeni

0

SQS隊列----->脫粒機(執行人的n個)。

這個模型會很好。只要任何一個執行者實例接收到消息,消息就會從SQS中隱藏起來。

保持消息隱形時間或者比消息處理時間高於在風暴拓撲。

您可以在ack方法中保留刪除SQS消息邏輯。