Este documento presenta Apache Flink y su capacidad para procesar datos en streaming usando Python. Primero introduce a GMV, la compañía que dará la presentación. Luego resume las características clave de Flink como su soporte para ventanas, rendimiento y funcionalidades en comparación con otros frameworks. Finalmente, discute la experiencia usando Python con Flink, notando que aunque es posible, el soporte es más limitado que otros lenguajes como Scala.
4. Madrid Python Meetup 2016/03/10 Página 4
UN GRUPO TECNOLÓGICO
GLOBAL
Grupo
multinacional
tecnológico
Fundado en
1984
Capital
privado
Sede principal
en España
(Madrid)
Oficinas en 10 países
Más de 1.100
empleados
Origen
vinculado
al sector
espacial y
defensa
Aeronáutica, Espacio, Defensa,
Seguridad, Sanidad, Transporte,
Banca y finanzas, y Tecnologías de la
Información y la Comunicación
Ingeniería, desarrollo
e integración de
sistemas, software,
hardware, servicios y
productos
especializados
QUIÉNES SOMOS
6. Madrid Python Meetup 2016/03/10 Página 8
ACLARACIONES
INTRODUCCIÓN
Apache Flink no es un
servidor web ni un jefe indio
No vamos a contar palabras
¿Qué sabéis de Big Data?
7. Madrid Python Meetup 2016/03/10 Página 9
MADUREZ DEL BIGDATA
¿POR QUÉ APACHE FLINK?
Descartar
Almacenar
Procesar
Streaming
8. Madrid Python Meetup 2016/03/10 Página 10
ARQUITECTURA TÍPICA
¿POR QUÉ APACHE FLINK?
Data
adquisition
Stream Processing Serving DB
• Es común almacenar también la información en crudo
• La base de la arquitectura suele ser un clúster con HDFS
9. Madrid Python Meetup 2016/03/10 Página 11
DESPLIEGUE
¿POR QUÉ APACHE FLINK?
W1
W2
W3
W4
Wn
M1
Clúster de HDFS + Flink
K1 K2 Kn
Clúster de Kafka
C3C1 C2
C5C4 C6
Clúster de Cassandra
W5
W6
11. Madrid Python Meetup 2016/03/10 Página 13
APACHE FLINK
¿POR QUÉ APACHE FLINK?
El core de Flink es un motor
de procesamiento de flujos
de datos en streaming.
Proporciona distribución de los
datos, comunicación y tolerancia
a fallos para realizar
computación distribuida con
streams de datos.
Sobre ese core se han
desarollado dos API y varias
librerías en Scala, Java y Python
14. Madrid Python Meetup 2016/03/10 Página 16
TRIGGERS Y EVICTORS
DATASTREAM API
5 2 9 9 7 0 3 8 2 A 9 4
20 18
Pueden cancelar el procesado de los
elementos de una ventana
Permiten adelantar el procesado de una
ventana
5 2 9 9 7 -1 3 8 2 1 9 4
25 18 16
Podemos controlar los elementos que
llegan de las ventanas antes de
evaluarlos
Triggers
Evictors
7 3 8
15. Madrid Python Meetup 2016/03/10 Página 17
EL TIEMPO ES IMPORTANTE
DATASTREAM API
¿Qué tiempo utilizar para construir las ventanas?
El momento en el que se
generó el evento
El momento en que se
recibe el evento
El momento en que se
procesa el evento
Flink maneja relojes diferentes para cada
uno de ellos
16. Madrid Python Meetup 2016/03/10 Página 18
RENDIMIENTO
COMPARATIVA
• Lo deseable es mantener un alto caudal con una latencia baja
• Flink permite ajustar los tamaños de los buffers internos para
aumentar el caudal a costa de aumentar la latencia y
viceversa.
17. Madrid Python Meetup 2016/03/10 Página 19
FUNCIONALIDADES
COMPARATIVA
Streaming “true” mini batches “true”
API low-level high-level high-level
Fault tolerance tuple-level ACKs RDD-based (lineage) coarse checkpointing
State not built-in external internal
Exactly once at least once exactly once exactly once
Windowing not built-in restricted flexible
Latency low medium low
Throughput medium high high
19. Madrid Python Meetup 2016/03/10 Página 21
SEGÚN LA DOCUMENTACIÓN
EXPERIENCIA CON PYTHON
La mayoría de las API no están
disponibles.
¡¡No está disponible la API
para Streams!!
El API para procesado en batch
tiene todas las operaciones
(alguna más que en scala)
Los conectores de E/S son
muchos menos y con menos
opciones
20. Madrid Python Meetup 2016/03/10 Página 22
PRUEBA BÁSICA
EXPERIENCIA CON PYTHON
class Adder(GroupReduceFunction):
def reduce(self, iterator, collector):
count, event = iterator.next()
count += sum([x[0] for x in iterator])
collector.collect((event, count))
if __name__ == "__main__":
output_file = 'out.txt'
env = get_environment()
data =
env.read_csv("/home/jordi/Development/python-
flink/final-dataset.csv",
(INT, STRING, STRING, STRING, STRING, STRING,
STRING, STRING, BOOL, BOOL, INT, INT, INT, INT,
STRING, INT, INT, STRING, STRING, FLOAT, FLOAT,
STRING))
data
.map(lambda x: (1, x[5]))
.group_by(1)
.reduce_group(Adder())
.map(lambda x: 'Event: %s. Freq: %s' % (x[0],x[1]))
.write_text(output_file,write_mode=WriteMode.OVERWRITE)
env.execute(local=True)
El rendimiento es más bajo que el
mismo programa en scala.
Levanta un intérprete Python que
envía el código al core de Flink
21. Madrid Python Meetup 2016/03/10 Página 23
POCA ACIVIDAD
EXPERIENCIA CON PYTHON
El último commit de la parte de Python fue hace varios meses:
En proporción, hay muy poco código Python:
25. Madrid Python Meetup 2016/03/10 Página 51
TERASORT
PERFORMANCE
Terasort es una prueba para medir el rendimiento de tecnologías
BigData. Se trata de ordenar 1 Tb de datos (o más) en el menor
tiempo posible
http://eastcirclek.blogspot.com.es/2015/06/terasort-for-spark-and-flink-with-range.html
26. Madrid Python Meetup 2016/03/10 Página 52
TERASORT
PERFORMANCE
http://eastcirclek.blogspot.com.es/2015/06/terasort-for-spark-and-flink-with-range.html
27. Madrid Python Meetup 2016/03/10 Página 53
STREAMING - YAHOO
PERFORMANCE
https://yahooeng.tumblr.com/post/135321837876/benchmarking-streaming-computation-engines-at
The job of the benchmark is to read various JSON events from Kafka, identify the
relevant events, and store a windowed count of relevant events per campaign
into Redis.
30. Madrid Python Meetup 2016/03/10 Página 56
CONSTRUCCIÓN DE VENTANAS
VENTANAS
http://data-artisans.com/how-apache-flink-enables-new-streaming-applications-part-1/