The best feature of Apache Spark Streaming is that it's built upon the Spark SQL engine. This is easy for someone coming from a SQL background to work with real-time data, even if they are new to real-time processing. They can quickly get started using the Spark SQL engine. Another valuable feature is that we can control many aspects such as the configuration of the engine, memory management, and have a checkpointing mechanism that allows us to manually start or restart jobs from a specific point. This is particularly useful for restoring messages of a Kafka topic from a specific date and time using the checkpointing mechanism. The integration with Spark's ecosystems such as MLlib and GraphX has significant potential, although I have not worked on that part as we focus mainly on data engineering. We can handle late-arriving data with Apache Spark Streaming. Sometimes aggregation results might be missed if data arrives out of order, but features such as windowing allow us to manage out-of-order data by specifying a watermark time. Recently released mechanisms to query the state make it easier to handle data programmatically.