Storm中的Stream grouping有哪幾種方式?

在拓撲圖中,每一個bolt接受一個spout或者bolt的數據,可是每個spout或者bolt有多個實例,所以哪個接受哪個bolt或者spout實例的數據須要stream grouping。服務器

  Storm定義了七種內置數據流分組的方式:網絡

1.Shuffle grouping(隨機分組):這種方式會隨機分發tuple給bolt的各個task,每一個bolt實例接收到相同數量的tuple。併發

2.Fields grouping(按字段分組):根據指定字段的值進行分組。好比說,一個數據流根據'word'字段進行分組,全部具備相同的'word'字段值的tuple會路由到同一個bolt的task中。性能

3.All grouping(全複製分組):將全部的tuple複製後分發給全部的bolt task。每一個訂閱數據流的task都會接收到tuple的拷貝。orm

4.Globle grouping(全局分組):這種分組方式將全部的tuples路由到惟一一個task上。Storm按照最小的taskID來選取接收數據的task。注意!!當使用全局分組方式時,設置bolt的task併發度是沒有意義的,由於全部tuple都轉發到同一個task上了。使用全局分組的時候須要注意,由於全部tuple都轉發到一個JVM實例上,可能會引發Storm集羣中某個JVM或者服務器出現性能瓶頸或奔潰。路由

5.None grouping(不分組):在功能上和隨機分組相同,是爲未來預留的。it

6.Direct grouping (指向型分組):數據源會調用emitDirect()方法來判斷一個tuple應該由哪一個Storm組件來接收。只能在聲明瞭是指向型的數據流上使用。集羣

7.Local or shuffle grouping(本地或隨機分組):和隨機分組相似,可是,會將tuple分發給同一個worker內的bolt task(若是worker內有接收數據的bolt task)。其餘狀況下,採用隨機分組的方式。取決於topology的併發度,本地或隨機分組能夠減小網絡傳輸,從而提升topology性能。stream

相關文章
相關標籤/搜索