Apache Flink | |
---|---|
Desarrollador | Fundación de software Apache |
Escrito en | Java [2] [1] y Scala [1] |
Primera edición | 6 de enero de 2015 [1] |
plataforma de hardware | máquina virtual de Java |
ultima versión |
|
Licencia | Licencia Apache 2.0 |
Sitio web | flink.apache.org |
Archivos multimedia en Wikimedia Commons |
Apache Flink es un marco de procesamiento de secuencias de código abierto desarrollado por Apache Software Foundation .
El marco se basa en un motor de procesamiento de procesos escrito en Java y Scala [4] [5] . Flink admite la programación de flujo de datos tanto en modo paralelo como en modo tubería (pipeline) [6] . En modo pipeline (pipeline) Flink te permite implementar una secuencia de trabajos (batch) y un flujo de trabajos (stream) [7] [8] . Flink también admite algoritmos iterativos de forma natural [9] .
Flink tiene un alto rendimiento y una baja latencia [10] , los subprocesos pueden ser activados por eventos y mantener el estado. Las tareas en el sistema Flink son tolerantes a fallas y usan estrictamente la misma semántica [11] . Los programas para el marco se pueden escribir en Java , Scala [12] , Python [13] y SQL [14] , los trabajos se compilan y optimizan automáticamente [15] , trabajando tanto en clústeres como en un servidor en la nube [16] .
Flink no cuenta con un sistema de almacenamiento propio, sino que utiliza fuentes de datos y conectores como Amazon Kinesis , Apache Kafka , Alluxio , HDFS , Apache Cassandra y ElasticSearch [17] .
Apache Flink fue desarrollado bajo la licencia Apache 2.0 [18] por la comunidad Apache Flink dentro de Apache Software Foundation . El proyecto fue dirigido por 25 desarrolladores principales y más de 340 programadores colaboradores.
Los desarrolladores originales de Apache Flink fundaron Data Artisans, una empresa de 12 desarrolladores principales [19] [20] .
La programación de flujo de datos en Apache Flink se basa en el manejo de eventos tanto para conjuntos de datos de tiempo limitado como para flujos continuos sin límites de tiempo. En el nivel inferior, los programas del sistema Flink se dividen en flujos (stream) y transformaciones (transformación). Una secuencia es conceptualmente una cola de registros que nunca puede terminar. Una transformación es una operación que recibe uno o más flujos como entrada y luego transforma los datos también en uno o más flujos [21] .
Apache Flink utiliza dos API principales: la API DataStream para transmisiones limitadas o ilimitadas y la API DataSet para conjuntos de datos limitados. Flink también es compatible con Table API para tablas, utilizando un lenguaje como SQL tanto para transmisiones como para trabajos. En el nivel más alto, Flink es compatible con el lenguaje SQL, que está semánticamente cerca de Table API y realiza consultas a través de SQL.
En tiempo de ejecución, los programas de Flink se asignan a la transmisión [21] . Cada subproceso recibe información de una o más fuentes (por ejemplo, entrada, cola o archivo) y termina enviando datos a una o más secuencias de salida (cola de mensajes, archivos, base de datos). La corriente sufre una cantidad arbitraria de transformación. Los subprocesos forman un gráfico sin bucles, lo que permite que una aplicación se bifurque en muchos subprocesos y fusione subprocesos.
Flink sugiere conectar los flujos de entrada y salida a los almacenamientos de Alluxio , Apache Kafka , Amazon Kinesis, HDFS , Apache Cassandra , etc. [17] .
En los sistemas distribuidos, los programas de Flink pueden ejecutarse en clústeres o ser independientes, utilizando también YARN, Mesos o Docker para configurar y asignar recursos [22] .
Apache Flink incluye un mecanismo ligero de conmutación por error que utiliza puntos de control distribuidos [11] . Un punto de control es un guardado asíncrono automático (instantánea) del estado de la aplicación en el subproceso original. En caso de falla, un programa en un entorno Flink con la opción de punto de interrupción recuperará el proceso desde el último guardado, asumiendo que Flink opera con una sola semántica de estado de aplicación. El mecanismo de punto de control utiliza ganchos en el código de la aplicación para que los sistemas externos puedan habilitar el ahorro de estado en los puntos de control (similar a las transacciones cuando se trabaja con bases de datos).
Flink también incluye un mecanismo de "savepoints", que se activan manualmente [23] . El usuario puede crear un punto de guardado, detener el programa en el entorno Flink y luego reiniciarlo desde la misma posición. Los puntos de guardado también le permiten realizar cambios en el programa sin perder el estado de la aplicación. A partir de la versión de Flink 1.2, los puntos de guardado le permiten reiniciar la aplicación en una situación de procesamiento paralelo de datos
La API de DataStream en el sistema Flink realiza transformaciones, como filtrado, agregación, muestreo, en flujos de datos limitados o ilimitados. La API de DataStream incluye más de 20 tipos diferentes de transformaciones que se pueden usar en Java y Scala [24] .
Aquí hay un ejemplo de un procesamiento de flujo simple para un recuento de palabras en un flujo de entrada continuo en intervalos de tiempo de cinco segundos:
importar organización . apache _ pestañear _ transmisión _ API _ escala _ _ importar org . apache _ pestañear _ transmisión _ API _ ventanas _ tiempo _ Tiempo case class WordCount ( palabra : String , cuenta : Int ) object WindowWordCount { def main ( argumentos : Array [ String ]) { val env = StreamExecutionEnvironment . getExecutionEnvironment val text = env . socketTextStream ( "host local" , 9999 ) val cuenta = texto . planoMapa { _ . a Minúsculas . división ( "\\W+" ) filtro { _ . no vacío } } . mapa { Contador de palabras ( _ , 1 ) } . keyBy ( "palabra" ) . timeWindow ( Tiempo . segundos ( 5 )) . suma ( "contar" ) cuenta _ impresión env . ejecutar ( "Contador de palabras de flujo de ventana" ) } }En este flujo, el texto de entrada se divide en palabras mediante la operación flatMap, cada palabra se convierte en una estructura WordCount con un contador igual a uno, el flujo de objetos WordCount se agrupa por palabras e intervalos de tiempo de 5 segundos, y luego se resume por contadores, de modo que el flujo final contenga contadores de palabras para intervalos de cinco segundos.
Apache Beam - Intérprete de FlinkApache Beam ofrece un modelo de programación unificado que permite al desarrollador crear trabajos en modo canalizado y de transmisión, y luego ejecutar los trabajos creados en el entorno Flink [25] . El Flink Executor basado en Apache Beam contiene un amplio conjunto de funciones [26] .
El ejecutor Flink está siendo desarrollado por Data Artisans [27] .
La API de DataSet en el sistema Flink admite operaciones de transformación de datos (como filtrado, agrupación, mapeo, unión) con conjuntos de datos de tiempo limitado. La API de DataSet ofrece alrededor de 20 tipos de transformaciones [28] . Esta API es compatible con Java y Scala, y también hay una API experimental para Python. El concepto de la API DataSet es similar al de la API DataStream.
Table API es un lenguaje de expresión de tipo SQL para manejar flujos y trabajos relacionales, Table API es parte de las API DataSet y DataStream para Java y Scala. Table API y la interfaz SQL correspondiente funcionan con una representación abstracta de tablas relacionales. Las tablas abstractas se pueden crear a partir de datos externos o de flujos de datos y conjuntos de datos existentes. Table API admite operaciones relacionales: selección, agregación, conexión.
Las tablas también se pueden consultar utilizando el lenguaje SQL estándar. Table API y SQL ofrecen la misma funcionalidad y se pueden combinar en el mismo programa. Las tablas se pueden volver a convertir en conjuntos de datos o flujos de datos, las operaciones lógicas se optimizan con Apache Calcite y se convierten en programas de interfaz DataSet o DataStream [29] .
en redes sociales | |
---|---|
sitios temáticos |
Fundación de software Apache | |||||||
---|---|---|---|---|---|---|---|
Proyectos de primer nivel |
| ||||||
Subproyectos |
| ||||||
Web de Apache |
| ||||||
Otros proyectos | |||||||
Desarrollando proyectos ( Incubadora ) |
| ||||||
Proyectos fuera de servicio ( Ático ) | |||||||
|