1. Introducción
1.1. Motivación
1.1.1. Ventajas del procesamiento de streaming
1.1.2. Herramientas de Procesamiento de Streaming
1.2. Objetivos y Metodología
2. Fundamentos del Procesamiento de Streaming
2.1. Datos de streaming
2.2. Procesamiento por lotes y procesamiento de streaming
2.3. Procesamiento distribuido de streaming
2.4. Modelo de Procesamiento de Streaming
2.5. Procesamiento continuo vs. procesamiento en microlotes
2.6. Tiempo de evento y tiempo de procesamiento
2.7. Procesamiento de eventos con marcas de agua
2.8. Manipulación de Datos
2.8.1. Transformaciones
2.8.2. Agregaciones
2.9. Streaming sin estado y streaming con estado
3. Apache Spark
3.1. Introducción
3.2. Arquitectura de Spark
3.3. Despliegue de Spark
3.4. Api de Lenguajes de Spark
3.5. Abstracciones de Datos
3.5.1. DataFrames
3.5.2. SQL
3.5.3. Datasets
3.5.4. RDDs
3.6. Operaciones sobre los Datos
3.6.1. Transformaciones
3.6.2. Acciones
3.7. Spark en Funcionamiento
3.7.1. El DAGScheduler en detalle
3.8. Procesamiento de Streaming en Spark
3.8.1. Gestión de datos en Memoria
3.8.2. Transformaciones y Agregaciones
3.8.3. Semántica de Entrega de Datos
3.8.4. Fuentes de Datos
3.8.5. Sumideros de datos
3.8.6. Procesamiento sin estado y con estado
4. Apache Flink
4.1. Introducción
4.1.1. Escalabilidad
4.1.2. Procesamiento en memoria
4.2. Arquitectura de Flink
4.3. Despliegue de Flink
4.4. Api de Lenguajes de Flink
4.5. Niveles de Abstracción en Flink
4.5.1. SQL
4.5.2. Table Api
4.5.3. DataStream / DataSet Api
4.5.4. Stateful Stream Processing
4.6. Funcionamiento de Flink
4.7. Procesamiento de Streaming en Flink
4.7.1. Esencia del procesamiento de streaming
4.7.2. Procesamiento paralelo
4.7.3. Procesamiento con estado
4.7.4. Tolerancia a Fallas
4.7.5. Semántica de procesamiento
4.7.6. Ventanas en Flink
4.7.7. Funciones de Ventana
4.7.8. Fuentes de datos y sumideros
5. Trabajo Experimental
5.1. Descripción del Trabajo Experimental
5.2. Hardware Utilizado
5.3. Software Utilizado
5.4. Origen de Datos
5.4.1. Análisis del Origen de Datos
5.5. Pipelines de Procesamiento
5.5.1. Pipeline de Ingesta de Datos
5.5.2. Pipelines de Procesamiento
5.6. Código Fuente de Pipelines de Procesamiento
5.7. Herramientas de Monitorio y Medición
6. Evaluación Comparativa
6.1. Facilidad de Instalación y Despliegue
6.2. Fuentes de Datos Admitidas
6.3. Lenguajes de Programación soportados
6.4. Documentación Disponible
6.5. Evaluación de Rendimiento
6.5.1. Consideraciones Generales de la Evaluación de Rendimiento
6.5.2. Uso de CPU
6.5.3. Uso de Memoria
6.5.4. Cantidad de Hilos de Ejecución
6.5.5. Cantidad de Clases Cargada
6.5.6. Latencia
6.5.7. Duración Total del Ciclo de Procesamiento
6.6. Resumen de la Evaluación
7. Conclusiones y Trabajos Futuros
7.1. Facilidad de Instalación y Despliegue
7.2. Fuentes de Datos Admitidas para el Intercambio de Datos
7.3. Lenguajes de Programación Soportados
7.4. Documentación Disponible
7.5. Evaluación de Rendimiento
7.5.1. Uso de CPU
7.5.2. Uso de Memoria
7.5.3. Cantidad de Hilos de Ejecución Utilizados
7.5.4. Cantidad de Clases Cargadas
7.5.5. Latencia
7.5.6. Duración Total del Ciclo de Procesamiento
7.6. Consideraciones Finales
7.7. Trabajos Futuros
8. Bibliografía