Defining the execution semantics of stream processing engines