天天看點

storm stream grouping

stream grouping用來定義一個stream應該如何配置設定給Bolts上面的多個Tasks。

storm裡面有6種類型的stream grouping:

1. Shuffle Grouping: 随機分組, 随機派發stream裡面的tuple, 保證每個bolt接收到的tuple數目相同。輪詢,平均配置設定。

2. Fields Grouping:按字段分組,比如按userid來分組,具有同樣userid的tuple會被分到相同的Bolts, 而不同的userid則會被配置設定到不同的Bolts。

3. All Grouping:廣播發送, 對于每一個tuple,所有的Bolts都會收到。

4. Global Grouping: 全局分組,這個tuple被配置設定到storm中的一個bolt的其中一個task。再具體一點就是配置設定給id值最低的那個task。

5. Non Grouping: 不分組, 這個分組的意思是說stream不關心到底誰會收到它的tuple。目前這種分組和Shufflegrouping是一樣的效果,不平均配置設定。

6. Direct Grouping: 直接分組,這是一種比較特别的分組方法,用這種分組意味着消息的發送者決定由消息接收者的哪個task處理這個消息。 隻有被聲明為DirectStream的消息流可以聲明這種分組方法。而且這種消息tuple必須使用emitDirect方法來發射。消息處理者可以通過TopologyContext來或者處理它的消息的taskid (OutputCollector.emit方法也會傳回taskid)