Windowing is one of the most frequently used processing methods for streams of data. An
unbounded stream of data (events) is split into finite sets, or
windows, based on specified criteria, such as time. A window
can be conceptualized as an in-memory table in which events are added and removed based
on a set of policies. Storm performs computations on each window of events. An example
would be to compute the top trending Twitter topic every hour.

You can use high-level abstractions to define a window in a Storm topology, and you can
use stateful computation in conjunction with windowing. For more information, see Implementing State Management.

This chapter includes examples that implement windowing features. For more information
about interfaces and classes, refer to the Storm 1.1.0 javadocs.