Apache Flink is a true stream processor: continuous operators, rich event-time tooling, low-latency stateful apps, and strong exactly-once sink patterns.
Spark Structured Streaming (modern Spark) treats streams as unbounded tables with micro-batch execution by default. Excellent if your team already lives in Spark SQL/DataFrames. Older DStreams API is legacy.
Flink: source -> continuous ops -> sink (ms–low sec latency natural) Spark SS: source -> micro-batches of DF SQL -> sink (sec latency typical)
Choose Flink when
- Hard event-time, complex CEP, very low latency
- Large keyed state with fine control
Choose Spark SS when
- Same engine for batch + stream (one API)
- Warehouse-style SQL aggregations on streams
- Existing Spark platform skills
Interview tip: Contrast "continuous vs micro-batch," then say both can do windows/watermarks; ecosystem and latency needs decide.