Desarrollador(es) | Fundación de software Apache |
---|---|
Lanzamiento inicial | Mayo de 2011 (2011-05) |
Versión estable | 1.20.0 [1] / 1 de agosto de 2024 (1 August 2024) [2] |
Repositorio |
|
Escrito en | Java y Scala |
Sistema operativo | Multiplataforma |
Tipo |
|
Licencia | Licencia Apache 2.0 |
Sitio web | flink.apache.org |
Apache Flink es un marco de trabajo de procesamiento de flujo y procesamiento por lotes unificado de código abierto desarrollado por la Apache Software Foundation . El núcleo de Apache Flink es un motor de flujo de datos de transmisión distribuido escrito en Java y Scala . [3] [4] Flink ejecuta programas de flujo de datos arbitrarios de manera paralela a los datos y canalizada (por lo tanto , en paralelo a las tareas ). [5] El sistema de ejecución canalizada de Flink permite la ejecución de programas de procesamiento masivo/por lotes y de flujo. [6] [7] Además, el entorno de ejecución de Flink admite la ejecución de algoritmos iterativos de forma nativa. [8]
Flink proporciona un motor de transmisión de alto rendimiento y baja latencia [9] , así como soporte para el procesamiento en tiempo de eventos y la gestión de estados. Las aplicaciones de Flink son tolerantes a fallas en caso de falla de la máquina y admiten la semántica de "exactamente una vez". [10] Los programas se pueden escribir en Java , Scala , [11] Python , [12] y SQL [13] y se compilan y optimizan automáticamente [14] en programas de flujo de datos que se ejecutan en un entorno de clúster o de nube. [15]
Flink no proporciona su propio sistema de almacenamiento de datos, pero proporciona conectores de origen y destino de datos a sistemas como Apache Doris, Amazon Kinesis , Apache Kafka , HDFS , Apache Cassandra y ElasticSearch . [16]
Apache Flink es desarrollado bajo la Licencia Apache 2.0 [17] por la Comunidad Apache Flink dentro de la Apache Software Foundation . El proyecto está impulsado por más de 25 colaboradores y más de 340 contribuidores.
El modelo de programación de flujo de datos de Apache Flink permite el procesamiento de eventos por vez en conjuntos de datos finitos e infinitos. En un nivel básico, los programas de Flink constan de flujos y transformaciones. “Conceptualmente, un flujo es un flujo (potencialmente interminable) de registros de datos, y una transformación es una operación que toma uno o más flujos como entrada y produce uno o más flujos de salida como resultado”. [18]
Apache Flink incluye dos API principales: una API DataStream para flujos de datos limitados o no limitados y una API DataSet para conjuntos de datos limitados. Flink también ofrece una API Table, que es un lenguaje de expresión similar a SQL para el procesamiento relacional de flujos y lotes que se puede integrar fácilmente en las API DataStream y DataSet de Flink. El lenguaje de más alto nivel compatible con Flink es SQL, que es semánticamente similar a la API Table y representa programas como expresiones de consulta SQL.
Al ejecutarse, los programas Flink se asignan a flujos de datos de transmisión . [18] Cada flujo de datos Flink comienza con una o más fuentes (una entrada de datos, por ejemplo, una cola de mensajes o un sistema de archivos) y termina con uno o más receptores (una salida de datos, por ejemplo, una cola de mensajes, un sistema de archivos o una base de datos). Se puede realizar una cantidad arbitraria de transformaciones en el flujo. Estos flujos se pueden organizar como un gráfico de flujo de datos acíclico dirigido, lo que permite que una aplicación ramifique y fusione flujos de datos.
Flink ofrece conectores de origen y destino listos para usar con Apache Kafka , Amazon Kinesis, [19] HDFS , Apache Cassandra y más. [16]
Los programas Flink se ejecutan como un sistema distribuido dentro de un clúster y se pueden implementar en modo independiente, así como en configuraciones basadas en YARN, Mesos y Docker junto con otros marcos de gestión de recursos. [20]
Apache Flink incluye un mecanismo de tolerancia a fallos ligero basado en puntos de control distribuidos. [10] Un punto de control es una instantánea automática y asincrónica del estado de una aplicación y la posición en un flujo de origen. En caso de fallo, un programa Flink con puntos de control habilitados reanudará, tras la recuperación, el procesamiento desde el último punto de control completado, lo que garantiza que Flink mantenga la semántica de estado de una sola vez dentro de una aplicación. El mecanismo de puntos de control expone ganchos para que el código de la aplicación incluya también sistemas externos en el mecanismo de puntos de control (como abrir y confirmar transacciones con un sistema de base de datos).
Flink también incluye un mecanismo llamado puntos de guardado, que son puntos de control activados manualmente. [21] Un usuario puede generar un punto de guardado, detener un programa Flink en ejecución y luego reanudar el programa desde el mismo estado de aplicación y posición en la secuencia. Los puntos de guardado permiten realizar actualizaciones a un programa Flink o a un clúster Flink sin perder el estado de la aplicación. A partir de Flink 1.2, los puntos de guardado también permiten reiniciar una aplicación con un paralelismo diferente, lo que permite a los usuarios adaptarse a las cargas de trabajo cambiantes.
La API DataStream de Flink permite realizar transformaciones (por ejemplo, filtros, agregaciones, funciones de ventana) en flujos de datos acotados o no acotados. La API DataStream incluye más de 20 tipos diferentes de transformaciones y está disponible en Java y Scala. [22]
Un ejemplo simple de un programa de procesamiento de flujo con estado es una aplicación que emite un recuento de palabras desde un flujo de entrada continuo y agrupa los datos en ventanas de 5 segundos:
importar org . apache . flink . streaming . api . scala . _ importar org . apache . flink . streaming . api . windowing . time . Time clase de caso WordCount ( palabra : String , conteo : Int ) objeto WindowWordCount { def main ( args : Matriz [ Cadena ]) { val env = StreamExecutionEnvironment . getExecutionEnvironment val text = env . socketTextStream ( "localhost" , 9999 ) val counts = text . flatMap { _ . toLowerCase . split ( "\\W+" ) filter { _ . nonEmpty } } . map { WordCount ( _ , 1 ) } . keyBy ( "palabra" ) . timeWindow ( Tiempo . segundos ( 5 )) . sum ( "count" ) cuenta . imprimir env .execute ( "Conteo de palabras de la secuencia de ventanas " ) } }
Apache Beam “ofrece un modelo de programación unificado avanzado, que permite (a un desarrollador) implementar trabajos de procesamiento de datos por lotes y en streaming que pueden ejecutarse en cualquier motor de ejecución”. [23] El ejecutor Apache Flink-on-Beam es el más rico en funciones según una matriz de capacidades mantenida por la comunidad Beam. [24]
Los artisanos de datos, en conjunto con la comunidad Apache Flink, trabajaron en estrecha colaboración con la comunidad Beam para desarrollar un ejecutor de Flink. [25]
La API DataSet de Flink permite realizar transformaciones (por ejemplo, filtros, mapeo, unión, agrupamiento) en conjuntos de datos delimitados. La API DataSet incluye más de 20 tipos diferentes de transformaciones. [26] La API está disponible en Java, Scala y una API experimental de Python. La API DataSet de Flink es conceptualmente similar a la API DataStream.
La API de tablas de Flink es un lenguaje de expresión similar a SQL para el procesamiento relacional de flujos y lotes que se puede incorporar en las API de conjuntos de datos y secuencias de datos de Java y Scala de Flink. La API de tablas y la interfaz SQL funcionan en una abstracción de tablas relacionales. Las tablas se pueden crear a partir de fuentes de datos externas o de conjuntos de datos y secuencias de datos existentes. La API de tablas admite operadores relacionales como selección, agregación y uniones en tablas.
Las tablas también se pueden consultar con SQL normal. La API de tablas y SQL ofrecen una funcionalidad equivalente y se pueden combinar en el mismo programa. Cuando una tabla se convierte nuevamente en un DataSet o DataStream, el plan lógico, que se definió mediante operadores relacionales y consultas SQL, se optimiza utilizando Apache Calcite y se transforma en un programa DataSet o DataStream. [27]
Flink Forward es una conferencia anual sobre Apache Flink. La primera edición de Flink Forward se celebró en 2015 en Berlín. La conferencia de dos días contó con más de 250 asistentes de 16 países. Las sesiones se organizaron en dos secciones con más de 30 presentaciones técnicas de desarrolladores de Flink y una sección adicional con capacitación práctica sobre Flink.
En 2016, 350 participantes se unieron a la conferencia y más de 40 oradores presentaron charlas técnicas en 3 temas paralelos. El tercer día, los asistentes fueron invitados a participar en sesiones de capacitación práctica.
En 2017, el evento también se expande a San Francisco. El día de la conferencia está dedicado a charlas técnicas sobre cómo se utiliza Flink en la empresa, los aspectos internos del sistema Flink, las integraciones del ecosistema con Flink y el futuro de la plataforma. Incluye presentaciones, charlas de usuarios de Flink en la industria y el mundo académico, y sesiones de capacitación práctica sobre Apache Flink.
En 2020, a raíz de la pandemia de COVID-19, la edición de primavera de Flink Forward, que debía celebrarse en San Francisco, se canceló. En su lugar, la conferencia se celebró de forma virtual, desde el 22 de abril hasta el 24 de abril, con presentaciones en directo, casos de uso de Flink, aspectos internos de Apache Flink y otros temas sobre procesamiento de flujos y análisis en tiempo real. [28]
En 2010, el proyecto de investigación "Stratosphere: Information Management on the Cloud" [29] dirigido por Volker Markl (financiado por la Fundación Alemana de Investigación (DFG) ) [30] se inició como una colaboración de la Technische Universität Berlin , la Humboldt-Universität zu Berlin y el Hasso-Plattner-Institut Potsdam. Flink comenzó a partir de una bifurcación del motor de ejecución distribuida de Stratosphere y se convirtió en un proyecto de Apache Incubator en marzo de 2014. [31] En diciembre de 2014, Flink fue aceptado como un proyecto de nivel superior de Apache. [32] [33] [34] [35]
Versión | Fecha de lanzamiento original | Última versión | Fecha de lanzamiento | |
---|---|---|---|---|
Old version, no longer maintained:0.9 | 24 de junio de 2015 | 0.9.1 | 01-09-2015 | |
Old version, no longer maintained:0,10 | 16 de noviembre de 2015 | 0.10.2 | 11 de febrero de 2016 | |
Old version, no longer maintained:1.0 | 08-03-2016 | 1.0.3 | 11 de mayo de 2016 | |
Old version, no longer maintained:1.1 | 08-08-2016 | 1.1.5 | 22 de marzo de 2017 | |
Old version, no longer maintained:1.2 | 06-02-2017 | 1.2.1 | 26 de abril de 2017 | |
Old version, no longer maintained:1.3 | 01-06-2017 | 1.3.3 | 15 de marzo de 2018 | |
Old version, no longer maintained:1.4 | 12 de diciembre de 2017 | 1.4.2 | 08-03-2018 | |
Old version, no longer maintained:1.5 | 25 de mayo de 2018 | 1.5.6 | 26 de diciembre de 2018 | |
Old version, no longer maintained:1.6 | 08-08-2018 | 1.6.3 | 22 de diciembre de 2018 | |
Old version, no longer maintained:1.7 | 30 de noviembre de 2018 | 1.7.2 | 15 de febrero de 2019 | |
Old version, no longer maintained:1.8 | 09-04-2019 | 1.8.3 | 11 de diciembre de 2019 | |
Old version, no longer maintained:1.9 | 22 de agosto de 2019 | 1.9.2 | 30 de enero de 2020 | |
Old version, no longer maintained:1.10 | 11 de febrero de 2020 | 1.10.3 | 29 de enero de 2021 | |
Old version, no longer maintained:1.11 | 06-07-2020 | 1.11.6 | 16 de diciembre de 2021 | |
Old version, no longer maintained:1.12 | 10 de diciembre de 2020 | 1.12.7 | 16 de diciembre de 2021 | |
Old version, no longer maintained:1.13 | 03-05-2021 | 1.13.6 | 18 de febrero de 2022 | |
Old version, no longer maintained:1.14 | 29 de septiembre de 2021 | 1.14.6 | 28 de septiembre de 2022 | |
Old version, no longer maintained:1.15 | 5 de mayo de 2022 | 1.15.4 | 15 de marzo de 2023 | |
Old version, no longer maintained:1.16 | 28 de octubre de 2022 | 1.16.3 | 29 de noviembre de 2023 | |
Old version, yet still maintained:1.17 | 23-03-2023 | 1.17.2 | 29 de noviembre de 2023 | |
Old version, yet still maintained:1.18 | 24 de octubre de 2023 | 1.18.0 | 24 de octubre de 2023 | |
Current stable version: 1.19 | 18-03-2024 | 1.19.0 | 18-03-2024 | |
Leyenda: Versión antigua, sin mantenimiento Versión antigua, aún mantenida Última versión Latest preview version Future release |
Fechas de lanzamiento
Fechas de lanzamiento de Apache Incubator
Fechas de lanzamiento de la versión anterior a Apache Stratosphere
Las versiones 1.14.1, 1.13.4, 1.12.6 y 1.11.5, que se suponía que solo contendrían una actualización de Log4j a 2.15.0, se omitieron porque se descubrió CVE-2021-45046 durante la publicación de la versión. [36]