Modern information processing systems increasingly demand the ability to continuously process incoming streaming data in a timely and reliable manner. Data streams arise in diverse applications ranging from patient monitoring in healthcare to real-time decision-making in emerging Internet of Things (IoT) systems. In this talk, I will present my research on the design of programming abstractions for stream processing that enable guarantees of correctness and predictable performance. First, I will introduce a type-based framework for the logical specification of distributed streaming computations that facilitates correct and efficient deployment on distributed architectures such as Apache Storm. Then, I will present StreamQRE, a declarative domain-specific language and execution engine for stream processing. StreamQRE offers strong theoretical guarantees for resource usage, and its performance on realistic workloads is shown to compare favorably against other popular streaming engines. Finally, as a case study, I will discuss the application of StreamQRE to the design space exploration of alternative algorithms for cardiac arrhythmia detection.