天天看點

Stream Grouping詳解

Storm裡面有7種類型的stream grouping

  • shuffle Grouping :随機分組,随機派發stream裡面的tuple,保證每個bolt接收到的tuple數目大緻相同。
  • Fields Grouping:按字段分組,比如按userID來分組,具有同樣userID的tuple會被分到相同的bolts裡的一個task,而不同的userID則會被配置設定到不同的bolts裡面的task。
  • All Grouping :廣播發送,對于每一個tuple,所有的bolts都會收到。
  • Global Grouping :全局分組,這個tuple被配置設定到storm中的一個bolt的其中一個task,再具體一點就是配置設定給id值最低的那個task。
  • Non Grouping :不分組,這stream grouping個分組的意思是說stream不關心到底誰會收到它的tuple。目前這種分組和shuffle grouping是一樣的效果,有一點不同的是storm會把這個bolt放到這個bolt的訂閱者同一個線程裡面去執行。
  • Direct Grouping :直接分組,這是一種比較特别的分組方法,用這種分組意味着消息的發送者指定有消息接收者的哪個task處理這個消息,隻有被聲明為Direct Stream的消息流可以聲明這種方法。而且這種消息tuple必須使用emitDirect方法來發射。消息處理者可以通過TopologyContext來擷取處理他的消息的task的id(outputCollector.emit方法也會傳回task的id)
  • local or shuffle grouping:如果目标bolt有一個或者多個task在同一個工作程序中,tuple将會随機發生給這些tasks。否則,和普通的shuffle grouping行為一緻。
  • 部分源碼展示:
Stream Grouping詳解