當(dāng)topology發(fā)布時,所有的bolt和spout組件首先會進(jìn)行序列化,然后通過網(wǎng)絡(luò)發(fā)送到集群中.如果spout和bolt在序列化之前(比如在構(gòu)造函數(shù)中生成)實例化了任何無法序列化的實例變量,在進(jìn)行序列化時會拋出NotSerializableException異常.
storm集群在并發(fā)運行時,有以下四個組成部分:
Node(服務(wù)器) storm集群中的一臺服務(wù)器,會運行topology中的一部分運算.一個集群會包括一個或者多個node. worker(jvm虛擬機) 指一個node上相互獨立運行的jvm進(jìn)程.每個node可以配置運行一個或者多個worker. executer(線程) 指一個worker的jvm進(jìn)程中運行的java線程.多個task可以指派給同一個executer執(zhí)行.除非是明確指定,storm默認(rèn)會給每個executor分配一個task. task(bolt/spout實例) task是spout和bolt實例,它們的nextTuple()和execute()方法會被executor執(zhí)行.一個或多個woker執(zhí)行一個topology,一個executer執(zhí)行一個task.
storm的task實際上可以認(rèn)為是一個實例,executor只是一個實際的執(zhí)行體.
新聞熱點
疑難解答