storm概念

此頁面列舉了Storm的主要概念和資源連接。討論的概念有:

  1. 拓?fù)洌═opologies)
  2. 流(Streams)
  3. Spouts
  4. Bolts
  5. 流分組(Stream groupings)
  6. 可靠性(Reliability)
  7. 任務(wù)(Tasks)
  8. Workers

拓?fù)?/h2>

實(shí)時(shí)應(yīng)用程序的邏輯被打包進(jìn)一個(gè)Storm拓?fù)洹R粋€(gè)Storm拓?fù)漕愃朴贛apReduce作業(yè)。一個(gè)主要的差異是MapReduce作業(yè)最終會(huì)執(zhí)行完成,而一個(gè)拓?fù)溆谰眠\(yùn)行(知道你殺死它)。一個(gè)拓?fù)涫且粋€(gè)spouts和bolts組成的圖連接著流分組。這些概念下面講述。

資源

流是Strom的核心抽象。流是一個(gè)無界的元組序列,在分布式下被處理和創(chuàng)建。流的模式名稱字段中定義流的元組。默認(rèn)情況下,元組可以包含整形,長(zhǎng)整型,短整型,字節(jié),字符串,浮點(diǎn)型,bool,按字節(jié)數(shù)組。你也可以定義自己的序列化器使得自定義類型可以再tuples中使用。

每個(gè)流在聲明的時(shí)候都要給定一個(gè)id。由于單個(gè)流spouts和bolts是如此常見, OutputFieldsDeclarer提供了便捷的方法聲明一個(gè)留而不需設(shè)置Id,這種情況下,流的id默認(rèn)值為default。
資源

Spouts

一個(gè)Spouts是拓?fù)渲辛鞯脑?。通常spouts從外部源中讀取元組并把他們發(fā)送到拓?fù)渲?。Spouts可以是可靠的或者不可靠的。一個(gè)可靠的spout可以在storm處理失敗的時(shí)候重放元組,不可靠的spout發(fā)送晚了元組就不管了。

Spouts可以發(fā)送到多個(gè)流。這么做,需要使用OutputFieldsDeclarerdeclareStream方法聲明多個(gè)流并且在使用 SpoutOutputCollector中的emit方法時(shí)指定流。

spouts的主要方法是nextTuple。nextTuple發(fā)送一個(gè)新的元組到拓?fù)渲谢蛘咴跊]有新的元組時(shí)直接返回。nextTuple不阻塞所有spout的實(shí)現(xiàn),因?yàn)镾torm在同一現(xiàn)成中調(diào)用所有的spout方法。

spouts的其他重要的方法有ackfail。當(dāng)Storm檢測(cè)到元組發(fā)送成功或者失敗的時(shí)候調(diào)用。ackfail只在可靠的spouts中有效,更多查看the Javadoc。

資源

Bolts

拓?fù)渲械乃械奶幚矶荚赽olts中完成。Bolts可以做任何事,過濾,函數(shù),聚合,連接,和數(shù)據(jù)庫交互等等。

Bolts可以做簡(jiǎn)單的stream轉(zhuǎn)換。復(fù)雜的流轉(zhuǎn)換通常需要多步多個(gè)bolts。例如,

Bolts可以發(fā)送到多個(gè)流。這么做,需要使用OutputFieldsDeclarerdeclareStream方法聲明多個(gè)流并且在使用 SpoutOutputCollector中的emit方法時(shí)指定流。

當(dāng)你聲明了一個(gè)bolt輸入流,通常訂閱到其他組件指定流上。如果你想要另外一個(gè)組件的所有流,你必須逐個(gè)訂閱。 InputDeclarer有愈發(fā)同訂閱流聲明了默認(rèn)的stream id。declarer.shuffleGrouping("1")訂閱到組件1的默認(rèn)留中等價(jià)于declarer.shuffleGrouping("1", DEFAULT_STREAM_ID)。

bolts的主要方法是execute接受一個(gè)元組作為輸入。Bolts使用OutputCollector對(duì)象發(fā)送新的元組。Bolts處理每個(gè)元組時(shí)必須調(diào)用OutputCollector 的ack方法,使得Storm知道元組完成了(并最終決定發(fā)送ack到原始的spout元組)。處理一個(gè)輸入元組,發(fā)送0個(gè)或多個(gè)tuples取決于輸入元組并ack到如入元組,Storm提供了一個(gè) IBasicBolt 接口自動(dòng)執(zhí)行ack操作。

在bolts中完全可以啟用新的現(xiàn)成一部處理, OutputCollector線程安全可隨時(shí)調(diào)用。

資源

Stream groupings

定義拓?fù)涞囊徊糠种付總€(gè)bolt該從哪些流中接受如數(shù)。一個(gè)流分組根據(jù)bolt的任務(wù)定義了流應(yīng)該如何劃分。

Storm有8個(gè)內(nèi)置流分組。你也可以通過實(shí)現(xiàn) CustomStreamGrouping接口實(shí)現(xiàn)自定義的流分組。

  1. Shuffle grouping(洗牌分組):元組隨機(jī)的出現(xiàn)在bolt任務(wù)中,每個(gè)bolt都會(huì)得到等量的tuples
  2. Fields grouping(字段分組):根據(jù)分組的字段劃分流。例如,如果流是根據(jù)user-id的字段分組,有相同user-id的元組到相同的bolt任務(wù)中,不同的user-id的元組到不同的任務(wù)中。
  3. Partial Key grouping:
  4. All grouping:流被發(fā)送到所有的bolt任務(wù)中,使用此分組需小心。
  5. Global grouping:整個(gè)流至進(jìn)入到一個(gè)bolt任務(wù)中。明確的,它只會(huì)到id最小的任務(wù)中。
  6. None grouping
  7. Direct grouping
  8. Local or shuffle grouping
    資源
  • TopologyBuilder:使用此類定義拓?fù)?/li>
  • InputDeclarer:當(dāng)TopologyBuilder調(diào)用setBolt方法時(shí)返回此對(duì)象,用于聲明bolt輸入流和如何組織流分組。

可靠性

Storm保證每個(gè)spout元組都會(huì)被完全處理。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Storm 系統(tǒng)中包含以下幾個(gè)基本概念:拓?fù)洌═opologies)流(Streams)數(shù)據(jù)源(Spouts)數(shù)據(jù)...
    發(fā)光的魚閱讀 841評(píng)論 0 0
  • 一、Storm是什么 Storm是一個(gè)免費(fèi)并開源的分布式實(shí)時(shí)計(jì)算系統(tǒng)。利用Storm可以很容易做到可靠地處理無限的...
    Graceleeman閱讀 3,050評(píng)論 0 6
  • 什么是實(shí)時(shí)流計(jì)算? 主要的處理模式可以分為:流處理,批處理 流處理是直接處理,有時(shí)也分為在線,離線,近線(st...
    Bloo_m閱讀 5,087評(píng)論 1 1
  • Storm版本:我們使用0.10.2的版本。Storm團(tuán)隊(duì)在2016年4月份發(fā)布了歷史性的版本升級(jí),終于到了1.0...
    編程回憶錄閱讀 622評(píng)論 0 0
  • 1.Stringcontroller方法返回字符串可以指定邏輯視圖名,通過視圖解析器解析為物理視圖地址 //1、使...
    Stringer閱讀 1,121評(píng)論 0 0