Package org.apache.storm.grouping
Class PartialKeyGrouping
- java.lang.Object
-
- org.apache.storm.grouping.PartialKeyGrouping
-
- All Implemented Interfaces:
Serializable
,CustomStreamGrouping
public class PartialKeyGrouping extends Object implements CustomStreamGrouping, Serializable
A variation on FieldGrouping. This grouping operates on a partitioning of the incoming tuples (like a FieldGrouping), but it can send Tuples from a given partition to multiple downstream tasks.Given a total pool of target tasks, this grouping will always send Tuples with a given key to one member of a subset of those tasks. Each key is assigned a subset of tasks. Each tuple is then sent to one task from that subset.
Notes: - the default TaskSelector ensures each task gets as close to a balanced number of Tuples as possible - the default AssignmentCreator hashes the key and produces an assignment of two tasks
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
PartialKeyGrouping.AssignmentCreator
This interface is responsible for choosing a subset of the target tasks to use for a given key.static class
PartialKeyGrouping.BalancedTargetSelector
A basic implementation of target selection.static class
PartialKeyGrouping.RandomTwoTaskAssignmentCreator
This implementation of AssignmentCreator chooses two arbitrary tasks.static interface
PartialKeyGrouping.TargetSelector
This interface chooses one element from a task assignment to send a specific Tuple to.
-
Constructor Summary
Constructors Constructor Description PartialKeyGrouping()
PartialKeyGrouping(Fields fields)
PartialKeyGrouping(Fields fields, PartialKeyGrouping.AssignmentCreator assignmentCreator)
PartialKeyGrouping(Fields fields, PartialKeyGrouping.AssignmentCreator assignmentCreator, PartialKeyGrouping.TargetSelector targetSelector)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description List<Integer>
chooseTasks(int taskId, List<Object> values)
This function implements a custom stream grouping.void
prepare(WorkerTopologyContext context, GlobalStreamId stream, List<Integer> targetTasks)
Tells the stream grouping at runtime the tasks in the target bolt.
-
-
-
Constructor Detail
-
PartialKeyGrouping
public PartialKeyGrouping()
-
PartialKeyGrouping
public PartialKeyGrouping(Fields fields)
-
PartialKeyGrouping
public PartialKeyGrouping(Fields fields, PartialKeyGrouping.AssignmentCreator assignmentCreator)
-
PartialKeyGrouping
public PartialKeyGrouping(Fields fields, PartialKeyGrouping.AssignmentCreator assignmentCreator, PartialKeyGrouping.TargetSelector targetSelector)
-
-
Method Detail
-
prepare
public void prepare(WorkerTopologyContext context, GlobalStreamId stream, List<Integer> targetTasks)
Description copied from interface:CustomStreamGrouping
Tells the stream grouping at runtime the tasks in the target bolt. This information should be used in chooseTasks to determine the target tasks.It also tells the grouping the metadata on the stream this grouping will be used on.
- Specified by:
prepare
in interfaceCustomStreamGrouping
-
chooseTasks
public List<Integer> chooseTasks(int taskId, List<Object> values)
Description copied from interface:CustomStreamGrouping
This function implements a custom stream grouping. It takes in as input the number of tasks in the target bolt in prepare and returns the tasks to send the tuples to.- Specified by:
chooseTasks
in interfaceCustomStreamGrouping
values
- the values to group on
-
-