Storm中的process,thread,task和spout对象实例,bolt对象实例

Storm中的process,thread和task的介绍可见文章 《Storm的基本架构和编程流程》,那么关于spout对象实例和bolt对象实例与这些(process,thread,task)的关系是怎么样的?
1、多个process共享同个spout对象实例或者bolt对象实例
2、多个thread共享同个spout对象实例或者bolt对象实例
3、多个task共享同个spout对象实例或者bolt对象实例


实际上,定义Topology实例的时候,我们定义好Spout实例和Bolt实例,然后将Topology实例提交给Nimbus的时候,这些定义好的Spout实例和Bolt实例会被“序列化”,“序列化”得到的字节码文件由Nimbus保存在Master Node上的某处,运行在Worker Node上的thread可以复制这些序列化后得到的字节码文件,从中“反序列化”得到Spout实例和Bolt实例。

具体来说就是:在定义Topology实例的时候,定义好的Spout实例和Bolt实例并不是最终的具体实例,而只是作为最终具体实例的数据来源,为了更好理解,我们可以称之为Spout原型实例和Bolt原型实例,这些原型实例被序列化保存在字节码文件中。在提交Topology实例后,在Worker Node上运行的process中的thread会复制该字节码文件,反序列化Spout原型实例和Bolt原型实例,得到最终的具体实例。在同一个thread中的多个task共享该具体实例,由于同一个thread上的多个task串行执行,因而不会出现“由于共享该具体实例而导致并发问题”的情形。关于这点,可见文章《Storm中进程,线程,任务和实例的关系


因而,以上所说的前2种情况不成立,第3种情况论述不够准确,只有同一个thread内的多个task才共享同一个spout实例或者bolt实例,不同thread内的task不共享同一个spout实例或者bolt实例。



参考文献:
[1]http://storm.apache.org/documentation/Lifecycle-of-a-topology.html
[2]https://storm.apache.org/apidocs/backtype/storm/task/IBolt.html

[3]https://groups.google.com/forum/#!topic/storm-user/IS8PijLjU8c

[4]https://groups.google.com/forum/#!topic/storm-user/com4JfU9aJ4

你可能感兴趣的:(Storm中的process,thread,task和spout对象实例,bolt对象实例)