  Many problems in Computer Science can be framed as the computation of queries
over sequences, or "streams" of data units called events. The field of Complex
Event Processing (CEP) relates to the techniques and tools developed to
efficiently process these queries. However, most CEP systems developed so far
have concentrated on relatively narrow types of queries, which consist of
sliding windows, aggregation functions, and simple sequential patterns computed
over events that have a fixed tuple structure. Many of them boast throughput,
but in counterpart, they are difficult to setup and cumbersome to extend with
user-defined elements.
  This paper describes a variety of use cases taken from real-world scenarios
that present features seldom considered in classical CEP problems. It also
provides a broad review of current solutions, that includes tools and
techniques going beyond typical surveys on CEP. From a critical analysis of
these solutions, design principles for a new type of event stream processing
system are exposed. The paper proposes a simple, generic and extensible
framework for the processing of event streams of diverse types; it describes in
detail a stream processing engine, called BeepBeep, that implements these
principles. BeepBeep's modular architecture, which borrows concepts from many
other systems, is complemented with an extensible query language, called eSQL.
The end result is an open, versatile, and reasonably efficient query engine
that can be used in situations that go beyond the capabilities of existing
systems.
