Como anillo al dedo me viene este artículo de Shivangi Gupta comparando las capacidades de Spark Streaming, Kafka Streaming y Flink:

Apache Spark es un framework open-source para computación en cluster con una base de usuarios global muy alta. Está escrito en Scada y ofrece APIs en Scala, Java, R y Python.

Apache Flink es una plataforma open-source para procesamiento distribuido de streams y batch. El core de Flink es un motor de procesamiento de datos que provee distribución de datos, comunicación y tolerancia a fallos. Sobre esto han construido procesamiento batch.

Apache Kafka es un plataforma de streaming distribuida , para transformaciones completes prove un API de Streams integrado, que permite que una aplicación actúe como un procesador de streams, consumiendo un input stream de uno o más tópicos y produciendo un stream de salida sobre uno o más tópicos de salida.

· Tanto Spark Streaming como Flink provee garantía de que cada registro se procesa una única vez, mientras que clientes Kafka pueden crearse con políticas de procesamiento de mensajes at-most-once, at-least-once y exactly-once

· Spark Streaming y Flink

· A nivel de modelo computacional: Spark Streaming usa micro-batches, Flink adopta un modelo de streaming de flujo continuo. Spark usa un window time-based y Flink un Windows record-based

· Flink y Spark sobre plataformas de procesamiento de datos de ámbito general, ambas top-level de Apache.

Ventajas de Spark Ventajas de Flink
-Velocidad

-Facilidad de uso

-Motor unificado y librerías de alto nivel (SQL,…)

-APIS en Java, Scala, Python y R

-Compartición de datos en memoria

-Ofrece un CLI

-Flink procesa data streams(no en micro-batchs)

-Gestión de memoria mejorado

-Velocidad

-Puede trabajar con topologías Storm

-API más sencilla que la de Spark