title: Implementing a Spout

{{< alert “spouts-and-bolts” >}}

Spouts must implement the ISpout interface.

public interface ISpout extends Serializable {
  void open(Map<String, Object> conf, TopologyContext context, SpoutOutputCollector collector);
  void close();
  void activate();
  void deactivate();
  void nextTuple();
  void ack(Object msgId);
  void fail(Object msgId);
}
  • The open method is called when the spout is initialized and provides the spout with the executing environment.

  • The close method is called when the spout is shutdown. There's no guarantee that this method is called due to how the instance is killed.

  • The activate method is called when the spout is asked to back into active state.

  • The deactivate method is called when the spout is asked to enter deactive state.

  • The nextTuple method is used to fetch tuples from input source and emit it to OutputCollector.

  • The ack method is called when the Tuple with the msgId emitted by this spout is successfully processed.

  • The fail method is called when the Tuple with the msgId emitted by this spout is not processed successfully.

See TestWordSpout for a simple spout example.

Instead of implementing the ISpout interface directly, you can also implement IRichSpout.