2015-10-28 16 views
0

我有一個靜態字段(計數器)在我的螺栓之一。現在,如果我與各種工作人員在羣集中運行拓撲。每個JVM都將擁有自己的靜態字段副本。但是我想要一個可以由工人共享的領域。我怎麼能做到這一點?如何在暴風雨中分享各種工人(JVM)的靜態字段?

我知道我可以堅持計數器的地方,並在每個JVM中讀取並更新它(同步)。但那將是性能問題。風暴有什麼出路嗎?

+0

風暴並沒有提供在多個工人共享狀態的任何支持。您需要構建自己的定製解決方案,即使用一些外部系統/機制來共享計數器。順便說一句:如果你想有一個一致的狀態,以同步的方式更新計數器是強制性的...你必須支付它的性能損失。 –

回答

1

默認的Storm api只提供至少一次處理保證。這可能會也可能不是你想要的,這取決於計數器的準確性是否重要(例如,當元組由於工人失敗而被重新處理時,計數器不正確地遞增)

我想你可以看看Trident,它是一個Storm的高級API,可以提供精確的一次處理保證和抽象(例如Trident狀態),以便使用數據庫或內存存儲保持狀態。 Cassandra有一個列類型的計數器,可能適合您的使用情況。

堅持三叉戟狀態的memcached https://github.com/nathanmarz/trident-memcached

堅持三叉戟狀態卡桑德拉 https://github.com/Frostman/trident-cassandra