天天看點

Storm概念與架構

Storm提出了幾個新的概念,了解這些概念對于學習Storm非常重要。Storm中核心概念如下:

1)Tuple:由一組可序列化的元素構成,每個元素可以是任意類型,包括Java原生類型、String、byte[]、自定義類型(必須是可序列化的)等。

2)Stream:無限的Tuple序列形成一個Stream。每個Stream由一個唯一ID、一個對Tuple中元素命名的Schema以及無限Tuple構成。

3)Topology:Storm中的使用者應用程式被稱為“Topology”,這類似于MapReduce中的“Job”。它是由一系列Spout和Blot構成的DAG,其中每個點表示一個Spout或Blot,每個邊表示Tuple流動方向。

4)Spout:Stream的資料源,它通常從外部系統(比如消息隊列)中讀取資料,并發射到Topology中。Spout可将資料(Tuple)發射到一個或多個Stream中。

5)Bolt:消息處理邏輯,可以是對收到的消息的任意處理邏輯,包括過濾、聚集、與外部資料庫通信、消息轉換等。Blot可進一步将産生的資料(Tuple)發射到一個或多個Stream中。

在一個Topology中,每個Spout或Blot通常由多個Task構成,同一個Spout或Blot中的Task之間互相獨立,它們可以并行執行,如圖13-4所示。可類比MapReduce Job了解:一個MapReduce Job可看作一個兩階段的DAG,其中Map階段可分解成多個Map Task, Reduce階段可分解成多個Reduce Task,相比之下,Storm Topology是一個更加通用的DAG,可以有多個Spout和Blot階段,每個階段可進一步分解成多個Task。

Storm概念與架構

6)Stream Grouping:Stream Grouping決定了Topology中Tuple在不同Task之間是的傳遞方式。Storm主要提供了多種Stream Grouping實作,常用的有:

  • Shuffle Grouping:随機化的輪訓方式,即Task産生的Tuple将采用輪訓方式發送給下一類元件的Task。
  • LocalOrShuffle Grouping:經優化的Shuffle Grouping實作,它使得同一Worker内部的Task優先将Tuple傳遞給同Worker的其他Task。
  • Fields Grouping:某個字段值相同的Tuple将被發送給同一個Task,類似于MapReduce或Spark中的Shuffl e實作。

一個Storm叢集由三類元件構成:Nimbus、Supervisor和ZooKeeper,它們的功能如下:

Storm概念與架構
  • Worker:實際的計算程序,每個Supervisor可啟動多個Worker程序(需靜态為每個Worker配置設定一個固定端口号),但每個Worker隻屬于特定的某個Topology。
  • Executor:每個Worker内部可啟動多個Executor線程,以運作實際的使用者邏輯代碼(Task)。每個Executor可以運作同類元件(同一個Topology内的Spout或Bolt)中一個或多個Task。
  • Task:使用者邏輯代碼,由Executor線程根據上下文調用對應的Task計算邏輯。
  • Supervisor的注冊與發現,監控失敗的Supervisor。
  • Worker通過ZooKeeper向Nimbus發送包含Executor運作狀态的心跳資訊 。
  • Supervisor通過ZooKeeper向Nimbus發送包含自己最新狀态的心跳資訊。