我爲何要理解storm的一些概念

    本文翻譯自官方文檔:http://storm.apache.org/documentation/Concepts.html。html

    Topology,拓撲;相似MapReduce的Job。一個重要區別是MR的任務一般有結束,然而拓撲是一直運行下去的。在後端,拓撲就是一個Thrift結構體(structure),所以能夠經過任何語言編寫拓撲。Java提供了TopologyBuilder工具類,來幫助組裝拓撲。java

    Stream,流;流是一連串的tuple,在定義時會同時指定schema,這個schema定義了各field的名字。默認地,tuple中能夠包含java的各原生類型的數據;你也能夠本身定義序列化/反序列化工具。tuple在clojure/java中是用命名列表實現的,其元素類型能夠動態,storm只須要知道如何將java數據序列化成tuple及其逆過程便可。apache

    Tuple能夠由任何類型的對象構成,默認使用Kryo進行序列化。這是一個靈活、快速的序列化庫,默認支持原生類型、ArrayList、HashMap、HashSet以及clojure的容器。爲何tuple中要支持動態類型?Hadoop中要求了靜態類型的key和value,所以在用戶端產生了大量的註解,致使API龐大而難用,卻只在類型安全上獲益,所以是不值得的。相反,動態類型更好用。更進一步,在tuple中使用靜態類型是沒有使人信服的策略的:假設一個bolt依賴多個上游stream,雖然一些基於反射的魔法可讓咱們能夠確知來的東西究竟是什麼類型,可是終究不如動態類型方便。最後,這樣作可讓storm更好地以原生的風格與clojure等動態語言接入。後端

    Spouts是streams的源頭。一般,spout從外部讀取tuple,而後將它們發射到topology中去。spout能夠是可靠的或不可靠的;前者會重放哪些處理失敗的tuple,然後者不會。spout也能夠發射tuple到多個stream中去,這須要使用OutputFieldDeclarer的declareStream方法。spout的主要的方法是nextTuple,它是運行在單線程中的,因此千萬不要阻塞它!ack和fail兩個方法也很重要,只有reliable型的spout會調用它們。安全

    Bolts是處理邏輯所在的地方。能夠map,filter,aggr,join等等。它的主方法是execute,也可使用OputputCollector句柄向下遊發射tuple。必須在bolt處理一個tuple完成後調用ack。工具

相關文章
相關標籤/搜索