When defining a topology, we create a graph of computation with the number of bolt-processing streams. At a more granular level, each bolt executes multiple tasks in the topology. Thus, each task of a particular bolt will only get a subset of the tuples from the subscribed streams.
Stream grouping in Storm provides complete control over how this partitioning of tuples happens among the many tasks of a bolt subscribed to a stream. Grouping for a bolt can be defined on the instance of org.apache.storm.topology.InputDeclarer returned when defining bolts using the org.apache e.storm.topology.TopologyBuilder.setBolt method.
Storm supports the following types of stream groupings.