Storm概念學習系列之Stream訊息流 和 Stream Grouping 訊息流組

weixin_33766168發表於2017-11-20

Stream訊息流是Storm中最關鍵的抽象,是一個沒有邊界的Tuple序列

  Stream Grouping 訊息流組是用來定義一個流如何分配到Tuple到Bolt

 

 

 

 

Stream訊息流和Stream Grouping訊息流組

  Storm核心的抽象概念是“流”。流是一個分散式並行建立和處理的無界的連續元組(Tuple)。流通過給流元組中欄位命名來定義。在預設情況下,元組可以包含整型、長整型、短整型、位元組、字串、雙精度浮點數、單精度浮點數、布林型和位元組陣列。

 

 

Stream訊息流
Stream息流是Storm中最關鍵的抽象,是一個沒有邊界的Tuple序列,這些Tuple以分散式的方式並行地建立和處理源源不斷傳遞的元組Tuple就組成了流Stream,定義訊息流主要是定義訊息流中的Tuple。Tuple的定義在前面的博文已經做了詳細介紹,本博文不再累述。訊息流Tuple中的每個欄位都有一個名字,並且不同Tuple對應欄位的型別必須相同。兩個Tuple的第一個欄位的型別必須相同,第二個欄位的型別必須相同,但是第一個欄位和第二個欄位可以有不同的型別。
每個訊息流在定義時都會分配一個ID,因為單向訊息流很普遍,OutputFieldsDeclarer定義了一些方法可以定義一個流而不用指定其ID。在這種情況下,該流有一個預設的ID。

 

 

  Storm將每個待處理或者新產生的Tuple封裝成“訊息”,而一個訊息流(Stream)則是一個沒有邊界的Tuple序列,而這些Tuple會以一種分散式的方式被並行地建立和處理。

 

 

 

 

Stream Grouping訊息流組
定義Topology的其中一步是定義每個Bolt接受何種流作為輸入。Stream Grouping(訊息流組)就是用來定義一個流如何分配Tuple到Bolt。Storm包括6種流分組型別。
1)隨機分組(Shuffle Grouping):隨機分發元組到Bolt的任務,保證每個任務獲得相等數量的元組。
2)欄位分組(Fields Grouping):根據指定欄位分割資料流並分組。例如,根據“user-id”欄位,具有該欄位的Tuple被分到相同的Bolt,不同的“user-id”值則會被分配到不同的Bolt。
3)全部分組(All Grouping):對於每一個Tuple來說,所有的Bolt都會收到,所有的Tuple被複制到Bolt的所有任務上,需小心使用該分組。
4)全域性分組(Global Grouping):全部的流都分配到Bolt的同一個任務,就是分配給ID最小的Task。
5)無分組(None Grouping):不分組的含義是,流不關心到底誰會收到它的Tuple。目前無分組等效於隨機分組,不同的是Storm將把無分組的Bolt放到訂閱Bolt或Spout的同一執行緒中執行(在可能實現的前提下)。
6)直接分組(Direct Grouping):這是一個特別的分組型別。元組生產者決定元組由哪個元組消費者任務接收。該分組僅能被宣告為direct stream的流使用。元組必須通過emitDirect方法直接發射。Bolt獲取消費者任務ID,可以使用已提供的TopologyContext類或保持引用OutputCollector類的emit方法的輸出,元組傳送後返回任務ID列表。

 

 

      

 

 

 

 

 

 

      


本文轉自大資料躺過的坑部落格園部落格,原文連結:http://www.cnblogs.com/zlslch/p/5989723.html,如需轉載請自行聯絡原作者

相關文章