2014-03-12 94 views
0

我正在使用風暴體系結構,並且我有一個產生5個線程的螺栓(/任務,據我所知它們是可互換的術語)。在Twitter/Apache Storm中共享資源

有沒有辦法讓我設置一個變量,所有的線程都可以讀寫?

謝謝:)。

+0

在工作內部運行的線程中的任務,它只能與同一JVM中的其他線程共享一個變量(儘管理想情況下不應該)。請記住,你有足夠的任務坐在大量的節點上運行的工作人員,讓他們分享內容的唯一方法是通過某種外部持久性。 – Svend

回答

1

爲了理解Storm中的並行性(以及哪些任務,執行者,工作人員的意思),我推薦:Understanding the parallelism of a Storm topology

在你的Bolt中,你可以擁有一個共享資源(比如Bolt的一個實例變量),但是你需要同步它的訪問權限,否則你將會陷入深度麻煩(不出所料)。但是這種共享資源不會在不同的Bolts之間共享。

+0

輝煌,謝謝。 – Richard

+2

不能100%確定這是否仍然成立,但根據https://groups.google.com/forum/#!topic/storm-user/IS8PijLjU8c,這些螺栓不需要是線程安全的。這意味着實例變量不會在螺栓之間共享(靜態類變量將由給定工作人員上的螺栓的所有實例共享)。我認爲,如果您想從多個方面讀取/寫入單個變量,您可能需要退後一步,重新考慮您正在執行的操作。看看現場分組,例如,他們可能會提供您真正想要的功能。 –

+0

Nimbus將創建所有螺栓線程,將其序列化併發送給相應的工作人員,因此螺栓線程是獨立的,並且資源被深度拷貝。工人的每項任務都有自己的螺栓或噴口實例。所以我們不能在任務或螺栓之間共享資源 – Jack47