Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Meetup Apache Flink en Madrid. Futuro de Apache Flink y su rivalidad con Spark Streaming

582 views

Published on

Charla de la tercera edición del Meetup Apache Flink en MAdrid "Flink en acción". Comparación entre Flink y Spark Streaming. Trabajos en marcha para las próximas versiones de Flink

Published in: Software
  • Be the first to comment

Meetup Apache Flink en Madrid. Futuro de Apache Flink y su rivalidad con Spark Streaming

  1. 1. Futuro de Apache Flink y su rivalidad con Spark Streaming Dr. Rubén Casado @ruben_casado #3. 18 de Diciembre de 2016 ruben.casado.tejedor@accenture.com
  2. 2. STREAMING PROCESSING es el paradigma de procesamiento para STORM VELOCIDAD APACHE FLINK
  3. 3. STREAMING PROCESSING Analizar según sucede
  4. 4. Plataforma tradicional de BI Plataforma Big Data batch processing Analytical Database Data as a platform Data Ingest Data Collection
  5. 5. Coche autodirigido
  6. 6. Waze
  7. 7. Semejanzas entre Apache Flink y Spark Streaming
  8. 8. ¿QUÉ SON? Plataforma de procesamiento distribuido basado en memoria para data-at-rest y data-in-motion. • Motor de procesamiento streaming ‒ Batch como caso especial de streaming • API sencillo para batch y streaming en múltiples lenguajes ‒ Java, Scala, SQL, Python (WIP), R (WIP) • Librerías para CEP, ML y Grafos • Integración con ecosistema Big Data ‒ Hadoop, Kafka, HBase, etc. • Open Source ‒ Proyecto Apache desde 2014 ‒ Evolución del prroyecto I+D europeo Stratosphere comenzado en 2010 ‒ Apoyo de la empresa DataArtisans Plataforma de procesamiento distribuido basado en memoria para data-at-rest y data-in-motion. • Motor de procesamiento batch ‒ Streaming mediante micro-batching • API sencillo para batch y streaming en múltiples lenguajes ‒ Java, Scala, SQL, Python, R • Librerías para ML y Grafos • Integración con ecosistema Big Data ‒ Hadoop, Kafka, HBase, etc. • Open Source ‒ Liberado en 2010 y proyecto Apache desde 2013 (incubating) – 2014 (top) ‒ Comenzado en 2009 por UC Berkeley ‒ Apoyo de la empresa Databricks Apache Flink Apache Spark
  9. 9. SEMÁNTICA DE PROCESAMIENTO AT-LEAST-ONCE AT-MOST-ONCE EXACTLY-ONCE Cada mensaje se procesa al menos una vez. Se asegura que todos los mensajes recibidos son procesados, pero podría pasar que algún mensaje se procesase más de una vez. Cada mensaje se procesa como máximo una vez. Se asegura que ningún mensaje es procesado más de una vez, pero podría pasar que algún mensaje no se procesase. Cada mensaje se procesa exactamente una vez. Ningún mensaje se queda sin procesar y ningún mensaje se procesa más de una vez. La más compleja de implementar.
  10. 10. DIFERENCIAS ENTRE APACHE FLINK Y SPARK STREAMING
  11. 11. EVENT-AT-TIME VS MICRO-BATCHING Diseño Al utilizar un motor para batch, Spark tiene que simular el streaming hacienda “batches pequeños” à micro- batching. Esto provoca una latencia ya que es necesario terminar el micro-batch de elementos antes de empezar a procesarlo. Tamaño mínimo 0,5 sg. Flink es un motor streaming nativo por lo que procesa elemento a elemento evitando esa latencia.
  12. 12. NOCIÓN DEL TIEMPO ProcessingTime Event Time Skew
  13. 13. Event Time Processing Time Una nueva esperanza Episodio IV 1977 El Imperio Contraataca Episodio V 1980 El Retorno del Jedi Episodio VI 1983 La Amenaza Fantasma Episodio I 1999 El ataque de los Clones Episodio II 2002 La venganza de los Sith Episodio III 2005 El despertar de la fuerza Episodio VII 2015
  14. 14. NOCIÓN DEL TIEMPO Funcionalidad Flink proporciona API para poder utilizar el event time o el processing time de forma sencilla. En caso de usar el event time, Flink se encarga automáticamente de gestionar los eventos desordenados (watermarks). Spark Streaming solo trabaja con processing time por lo que no puede gestionar eventos desordenados. • Planificado event time para Structured Streaming
  15. 15. 9:008:00 14:0013:0012:0011:0010:002:001:00 7:006:005:004:003:00 http://beam.incubator.apache.org/beam/capability/2016/04/03/presentation-materials.html VENTANAS
  16. 16. VENTANAS 13:00 14:008:00 9:00 10:00 11:00 12:00 http://beam.incubator.apache.org/beam/capability/2016/04/03/presentation-materials.html
  17. 17. Fijas Deslizantes 1 2 3 54 Sesiones 2 431 Key 2 Key 1 Key 3 Tiempo Nº elementos 2 3 4 VENTANAS http://beam.incubator.apache.org/beam/capability/2016/04/03/presentation-materials.html
  18. 18. Cuando juntamos tiempo y ventanas…. http://beam.incubator.apache.org/beam/capability/2016/04/03/presentation-materials.html
  19. 19. TRIGGER Y WATERMARK http://beam.incubator.apache.org/beam/capability/2016/04/03/presentation-materials.html
  20. 20. Estrategia early and late firings http://beam.incubator.apache.org/beam/capability/2016/04/03/presentation-materials.html
  21. 21. VENTANAS Funcionalidad Flink proporciona API para la gestión de los 3 tipos de ventanas permitiendo definir el tamaño e intervalo por tiempo y nº de elementos. Spark NO incluye ventanas por sesión y el tamaño de las NO se puede definir por nº de elementos. Flink incluye otros conceptos avanzados para gestión de ventanas • Triggers: permite lanzar la ejecución de una ventana sin terminar al cumplirse las condiciones especificadas. • Evictors: permite eliminar elementos de la ventana bajo las condiciones especificadas.
  22. 22. 2 3 VERSIONADO DE APLICACIONES Funcionalidad Para asegurar la semántica exactly-one, la consistencia de estados, y la tolerancia a fallos, tanto Flink como Spark utilizan checkpoints para guardar snapshots de su estado. Basado en ese mismo mecanismo Flink proporciona un API para savepoints, permitiendo hacer versionado de aplicaciones. Una nueva aplicación Flink (v1) puede partir del savepoint de una versión anterior de la aplicación (v0). Esto se puede usar para A/B Testing, implementar Arquitecturas Kappa, hacer rollbacks de versiones, etc. Los checkpoints de Spark Streaming no proporcionan la misma funcionalidad.
  23. 23. ITERACIONES Rendimiento Flink tiene un API para soporte nativo de Iteraciones. Importante para algoritmos iterativos muy habituales en machine learning y graph processing: • Iterate: se ejecuta sobre el resultado anterior (o el dataset inicial) • Delta Iterate: se ejecutan solo sobre la información que ha cambiado En Spark las iteraciones se tienen que programar como un bucle tradicional. Por tanto, en cada iteración se planifican y ejecutan las operaciones. Además no es posible hacer iteraciones delta. En Flink solo hay una planificiación y se pueden usar interaciones delta. El API DeltaIterate de Flink solo es válido para batch (DataSet).
  24. 24. THROUGHPUT & LATENCY Rendimiento El comportamiento de Flink es lineal, mientras que el de Spark es a escalones debido a su diseño de micro-batching. Flink consigue menor latencia ante el mismo throughput de Spark Streaming. Flink consigue una mejor relación troughput/latency que Spark Streaming Flink bate a Spark Streaming en el benchmark de referencia actualmente sobre tecnologías de streaming processing https://yahooeng.tumblr.com/post/135321837876/benchmarking-streaming- computation-engines-at http://data-artisans.com/extending-the-yahoo-streaming-benchmark/
  25. 25. EL FUTURO DE FLINK En qué está trabajando la comunidad
  26. 26. Flink v1.1 + trabajos en marcha 27 Connectors Session Windows (Stream) SQL Library enhancements Metric System Operations Ecosystem Application Features Metrics & Visualization Dynamic Scaling Savepoint compatibility Checkpoints to savepoints More connectors Stream SQL Windows Large state Maintenance Fine grained recovery Side in-/outputs Window DSL Broader Audience Security Cluster management Dynamic Resource Management Authentication Queryable State
  27. 27. Security / Authentication 28 • Evitar accesos no autorizados a los datos • Uso de seguridad basada en Kerberos • Kafka, ZooKeeper, HDFS, YARN, HBase, … • Evitar tráfico de información entre procesos Flink sin encriptar • RPC, Data Exchange, Web UI Contribuciones dirigidas por • Evitar que usuarios maliciosos espíen dentro de los jobs Flink
  28. 28. Checkpoints / Savepoints 29 • Recuperar un running job en un nuevo job • Recuperar running job en un nuevo cluster • Compatibilidad • Flink 1.0 hizo el APIs backwards compatible • Ahora se está trabajando en hacer los savepoints backwards compatible • Las aplicaciones se pueden mover a nuevas versiones de Flink incluso cuando el state backend cambie v1.x v2.0v1.y
  29. 29. Incremental Checkpointing • No guardar todos los estados sino la variación con el anterior • Optimización 30 Source Flink Pipeline HDFS para Checkpoints chk 1 chk 2 chk 3
  30. 30. Dynamic scaling 31 • Ajustar el nivel de paralelismo en running jobs • Re-escalar operadores stateless es trivial • Re-escalar operacores stateful (ventanas, estados de usuario) es complicado time Workload Resources El re-escalado debe asegurar la semántica exactly-one
  31. 31. Cluster management 32 • Serie de mejoras para interoperar de forma nativa con diferentes gestores de clusters • YARN, Mesos, Docker, Standalone, … • Aislamiento adecuado de jobs, soporte eficiente para sesiones con múltiles jobs • Adquisición y liberación dinámica de recursos • Uso de contenedores de diferentes tamaños Dirigido por Integración con Mesos realizada por y
  32. 32. Queryable State • Estados internos de Flink consultables de forma externa • Nueva funcionalidad de un sistema de streaming • Base de Datos RT • Nueva visión arquitecturas Lambda/Kappa 33 window assigner trigger allowed lateness window function timers
  33. 33. Stream SQL 34 • SQL es el lenguaje estandar para la manipulación de datos. • Parece el medio natural para abrir el streaming processing a más gente • Problema: No existe un estandar de Streaming SQL • Al menos más allá de las operaciones básicas • Objetivo: incorporar el concepto de ventanas y semántica del tiempo • La comunidad de Flink está trabajando con la comunidad de Apache Calcite en una propuesta de estandard de Streaming SQL SELECT STREAM TUMBLE_START(tStamp, INTERVAL ‘5’ HOUR) AS hour, COUNT(*) AS cnt FROM events WHERE status = ‘received’ GROUP BY TUMBLE(tStamp, INTERVAL ‘5’ HOUR)
  34. 34. Cómo saber más? • FLIP – Flink Improvement Proposals 35https://cwiki.apache.org/confluence/display/FLINK/Flink+Improvement+Proposals

×