1. Introduction

2. Background and Architecture
2.1. Online Data Processing Architecture
2.2. Data Streams and Models
2.3. Distributed Data Stream Processing

3. Stream Processing Engines and Tools
3.1. Early Stream Processing Solutions
3.2. Current Stream Processing Solutions

4. Managed Cloud Systems
4.1. Amazon Web Services (AWS) Kinesis
4.2. Google Dataflow
4.3. Azure Stream Analytics

5. Elasticity in Stream Processing Systems
5.1. Static Techniques
5.2. Online Techniques
5.3. Change and Burst Detection

6. Distributed and Hybrid Architecture
6.1. Lightweight Virtualization and Containers
6.2. Application Placement and Reconfiguration

7. Future Directions
7.1. SDN and In-Transit Processing
7.2. Programming Models for Hybrid and Highly Distributed Architecture

8. Summary and Conclusions