2014-03-12 4 views
0

나는 폭풍우의 아키텍처를 사용하고 있으며, 5 개의 스레드를 생성하는 볼트가 있습니다 (/ 태스크는 상호 교환 가능한 용어라고 말할 수있는 한).Twitter/Apache Storm의 리소스 공유

모든 스레드가 읽고 쓸 수있는 변수를 설정하는 방법이 있습니까?

감사합니다. :).

+0

작업자 내에서 실행되는 스레드의 작업은 동일한 JVM 내의 다른 스레드와 변수를 공유 할 수 있지만 (이상적으로는 그렇지 않아야 함). 많은 노드에서 실행되는 많은 수의 작업자가 작업을 많이하고 있다는 것을 명심하십시오. 노드를 공유 할 수있는 유일한 방법은 일종의 외부적인 지속성을 통한 것입니다. – Svend

답변

1

Storm (그리고 집행자, 직원이 의미하는 작업)을 이해하려면 Understanding the parallelism of a Storm topology을 권장합니다.

볼트에서 공유 리소스 (예 : 볼트의 인스턴스 변수)를 사용할 수 있지만 액세스를 동기화해야합니다. 그렇지 않으면 크게 어려움을 겪을 수 있습니다. 그러나 그 공유 자원은 다른 볼트 사이에서 공유되지 않을 것입니다.

+0

훌륭해, 고마워. – Richard

+2

아직 보유하고 있지만 https://groups.google.com/forum/#!topic/storm-user/IS8PijLjU8c에 따르면 볼트가 스레드로부터 안전하지 않아도되는지 100 % 확신 할 수 없습니다. 이것은 인스턴스 변수가 볼트 사이에서 공유되지 않는다는 것을 의미합니다 (정적 클래스 변수는 주어진 작업자의 모든 볼트 인스턴스와 공유됩니다). 많은 볼트에서 하나의 변수를 읽고 쓰려고하면 한 걸음 뒤로 물러나고 무엇을하고 있는지 다시 생각해 볼 수 있습니다. 필드 그룹을 살펴보십시오. 예를 들어, 실제로 원하는 기능을 제공 할 수 있습니다. –

+0

Nimbus는 모든 볼트 스레드를 만들고 직렬화 한 다음 적절한 작업자에게 보냅니다. 따라서 볼트 스레드는 독립적이며 리소스는 딥 복사됩니다. 작업자의 각 작업에는 볼트 나 주둥이의 인스턴스가 있습니다. 따라서 우리는 작업이나 볼트 사이에 공유 된 자원을 가질 수 없습니다. – Jack47