Ahorra un 25 % (o incluso más) en tus costes de Kafka | Acepta el reto del ahorro con Kafka de Confluent
Apache Flink es un marco de procesamiento de datos de código abierto que ofrece funcionalidades exclusivas tanto en el procesamiento en streaming como en el procesamiento por lotes. Es una herramienta muy utilizada para crear aplicaciones y arquitecturas de alto rendimiento, escalables y event-driven.
Crea fácilmente streams de datos reutilizables y de alta calidad con el único servicio totalmente gestionado y cloud-native del sector para Apache Flink® y Kafka, que ofrece análisis y streams de datos completos mediante Confluent.
Apache Flink es un marco y un motor de procesamiento distribuido para computación stateful sobre streams de datos limitados e ilimitados (también conocidos habitualmente con su voz inglesa «bounded» y «unbounded»). Flink se ha diseñado para ejecutarse en todos los entornos de cluster comunes y realizar cálculos a velocidad in-memory y a cualquier escala. Los desarrolladores crean aplicaciones para Flink utilizando distintas API, como Java o SQL, que el framework ejecuta en un cluster de Flink.
Si bien otros sistemas de procesamiento de datos populares, como Apache Spark y Kafka Streams, se limitan al streaming de datos o al procesamiento por lotes, Flink admite ambos. Esto lo convierte en una herramienta versátil para las empresas de sectores como las finanzas, el e-commerce y las telecomunicaciones, que ahora pueden realizar tanto procesamiento por lotes como en streaming en una misma plataforma unificada. Las empresas pueden utilizar Apache Flink para aplicaciones modernas como la detección del fraude, las recomendaciones personalizadas, los análisis bursátiles y el machine learning.
Si bien Kafka Streams funciona como una biblioteca que se ejecuta como parte de tu aplicación, Flink es un motor de procesamiento de streams autónomo que se implementa de forma independiente. Apache Flink ejecuta tu aplicación en un cluster de Flink que deberás haber implementado anteriormente. Flink ofrece soluciones a los problemas más complejos a los que se enfrentan los sistemas distribuidos de procesamiento en streaming, como la tolerancia a fallos, la entrega «exactly once», el alto rendimiento y la baja latencia. Estas soluciones implican puntos de control, puntos de guardado, gestión de estados y semántica temporal.
La arquitectura de Flink está diseñada tanto para el procesamiento en streaming como para el procesamiento por lotes. Es capaz de manejar streams de datos ilimitados y conjuntos de datos limitados, lo que permite el procesamiento y análisis de datos en tiempo real. Flink también garantiza la integridad de los datos y la coherencia de las instantáneas (también conocidas como «snapshots»), incluso en escenarios complejos de procesamiento de eventos.
En el siguiente diagrama, te mostramos los distintos componentes de Flink, así como el flujo de tiempo de ejecución de Flink. El código del programa o la consulta SQL se compone en un gráfico de operadores que el cliente envía a un gestor de trabajos («JobManager»). El gestor divide el trabajo en operadores que se ejecutan como tareas en los nodos que están ejecutando gestores de tareas («TaskManager»). Estas tareas procesan datos en streaming e interactúan con varias fuentes de datos, como el sistema de archivos distribuido de Hadoop (HDFS) y Apache Kafka.
Apache Flink se ha convertido en la opción preferida de muchas empresas por la solidez de su arquitectura y su amplio conjunto de funciones, entre las que encontramos una gestión sofisticada de los estados, puntos de guardado, puntos de control, semántica de procesamiento de la hora de los eventos y garantías de coherencia «exactly once» para el procesamiento con estado («stateful»).
El procesamiento en streaming con estado de Flink permite a los usuarios definir cálculos distribuidos sobre streams de datos continuos. De este modo, es posible realizar análisis complejos de procesamiento de eventos en streams de eventos, como uniones en ventanas, agregaciones y concordancia de patrones.
Flink puede gestionar tanto streams limitados como ilimitados, unificando el procesamiento por lotes y en streaming en un mismo lugar. Por eso resulta útil para necesidades muy distintas de procesamiento de datos, como las aplicaciones de streaming en tiempo real que requieren procesar ambos tipos de datos.
Flink también está diseñado para ejecutar aplicaciones con estado a prácticamente cualquier escala. Puede procesar datos paralelizados en miles de tareas distribuidas en varias máquinas y manejar de manera eficiente grandes conjuntos de datos. Por eso es perfecto para aplicaciones que necesitan escalar hasta miles de nodos con una latencia y una pérdida de rendimiento mínimas.
Flink también cuenta con API en capas para manejar streams en distintos niveles de abstracción. De esta forma, los desarrolladores disponen de la flexibilidad necesaria para gestionar casos de uso de procesamiento de streams comunes e hiperespecializados.
Flink tiene conectores para sistemas de mensajería y streaming, almacenes de datos, motores de búsqueda y sistemas de archivos como Apache Kafka, OpenSearch, Elasticsearch, DynamoDB, HBase y cualquier base de datos que proporcione un cliente JDBC.
Flink también ofrece varias interfaces de programación, incluida las API de alto nivel Streaming SQL y Table, la API DataStream de nivel inferior y la API ProcessFunction para un control preciso. Esta flexibilidad permite a los desarrolladores utilizar la herramienta adecuada para cada problema y admite tanto streams ilimitados como conjuntos de datos limitados.
También es compatible con múltiples lenguajes de programación —desde Java, Scala o Python hasta otros lenguajes JVM como Kotlin—, lo que lo convierte en una opción popular entre los desarrolladores.
Aunque se creó como un procesador de datos genérico, la compatibilidad nativa de Flink para streams ilimitados contribuyó a su popularidad como procesador de streams. Los casos de uso más comunes de Flink son muy similares a los de Kafka, aunque Flink y Kafka tienen propósitos ligeramente diferentes. Kafka generalmente proporciona el streaming de eventos, mientras que Flink se utiliza para procesar los datos de dicho stream. Veamos algunos de los casos en los que Flink y Kafka suelen usarse juntos:
Procesamiento por lotes: la especialidad de Flink es procesar conjuntos de datos limitados, lo que hace que se le den muy bien las tareas tradicionales de procesamiento por lotes, en las que los datos son finitos y se procesan en fragmentos.
Procesamiento en streaming: Flink está diseñado para gestionar streams de datos ilimitados. Gracias a ello, es posible procesar los datos de forma continua y en tiempo real, por lo que es perfecto para aplicaciones que requieren análisis y monitorización en tiempo real.
Aplicaciones event-driven: las capacidades de Flink en el procesamiento de streams de eventos lo convierten en una herramienta muy valiosa para crear aplicaciones event-driven como sistemas de detección de fraudes y anomalías, sistemas de transacciones con tarjetas de crédito, monitorización de procesos del negocio, entre otras.
Actualización de aplicaciones con estado (puntos de guardado): el procesamiento con estado y los puntos de guardado de Flink facilitan la actualización y el mantenimiento de aplicaciones con estado. De este modo, se garantizan la coherencia y la continuidad, incluso durante los fallos.
Aplicaciones de streaming: Flink es compatible con una amplia gama de aplicaciones de streaming, desde el simple procesamiento de datos en tiempo real hasta el procesamiento de eventos complejos y la detección de patrones.
Análisis de datos (por lotes y streaming): la capacidad de Flink para gestionar datos tanto por lotes como en streaming lo hace idóneo para el análisis de datos. Esto incluye el análisis de datos en tiempo real y el procesamiento de datos históricos.
Apache Flink tiene una arquitectura compleja. Aprender sobre Flink no es especialmente fácil y, a la hora de entenderlo, manejarlo y depurarlo, puede convertirse en todo un desafío incluso para los profesionales más experimentados. Los desarrolladores y operadores de Flink a menudo se enfrentan a complejidades en torno a las marcas de agua personalizadas, la serialización, la evolución de tipos, etc.
Flink plantea dificultades con la implementación y las operaciones de cluster (quizá incluso de forma más acentuada que en la mayoría de los sistemas distribuidos), como el ajuste del rendimiento para tener en cuenta la selección de hardware y las características del trabajo. Las dificultades más comunes tienen están relacionadas con el razonamiento sobre las causas fundamentales de los problemas de rendimiento, como la contrapresión, la lentitud de los trabajos y la restauración de puntos de guardado en estados excesivamente grandes. Otros problemas comunes incluyen la reparación de fallos en los puntos de control y la depuración de fallos en los trabajos, como los errores de falta de memoria.
Las empresas que utilizan Flink suelen necesitar equipos de expertos dedicados a desarrollar trabajos de procesamiento en streaming y a mantener operativo el marco de procesamiento de streams. Por este motivo, Flink solo ha sido económicamente viable para grandes empresas con necesidades complejas y avanzadas de procesamiento en streaming.
Kafka Streams es una popular biblioteca cliente que se utiliza para el procesamiento de streams, especialmente cuando los datos de entrada y salida se almacenan en un cluster de Kafka. Como forma parte de Kafka, aprovecha sus ventajas de forma nativa.
ksqlDB combina la simplicidad de SQL con Kafka Streams, lo que ofrece un buen punto de partida para el procesamiento de streams y amplía su audiencia.
Los usuarios de Kafka y los clientes de Confluent suelen recurrir a Apache Flink para procesar streams por varios motivos. Por ejemplo, el procesamiento de streams complejos suele conllevar un gran estado intermedio para el que no siempre tiene sentido usar Apache Kafka, porque cuando crece lo suficiente, este estado pasa a ser una entidad propia, lo que afecta a los recursos y a la planificación necesarios para la gestión del cluster de Kafka. Además,en algunos casos, resulta necesario procesar los streams de varios clusters de Apache Kafka en diferentes lugares o gestionar streams de Apache Kafka con streams provenientes de fuera de Apache Kafka, entre otros casos especiales.
Como Flink es su propio sistema distribuido —y eso conlleva sus propias complejidades y matices operativos—, no ha quedado claro si las ventajas de trabajar con Apache Flink superan los retos que plantea o los costes que acarrea, especialmente si se tiene en cuenta que existen otras tecnologías de procesamiento de streams como Kafka Streams o Apache Spark.
Ahora bien, la nube modifica los factores de ese cálculo y nos permite optar por una adopción completa de Apache Flink. Al ofrecer Apache Flink como un servicio en la nube totalmente gestionado, podemos llevar las ventajas que Confluent Cloud aporta a Kafka también a Flink. Las complejidades operativas y los matices que hacen que Apache Flink sea complejo y costoso (como la elección del tipo de instancia o del perfil de hardware, la configuración del nodo, la selección del back end del estado, la administración de instantáneas, los puntos de guardado, entre muchas otras) las gestiona Confluent por ti, lo que permite que los desarrolladores puedan centrarse exclusivamente en la lógica de su aplicación, en lugar de en gestionar los matices particulares de Flink.
Con ello, no solo se incorporan las prestaciones de Flink a Confluent Cloud, sino que también se modifica el contexto económico (y las decisiones financieras asociadas) que justifica el uso de Flink para el procesamiento de streams. Por tanto, Flink se puede utilizar en más casos de uso y en una fase más temprana del streaming de una empresa. Además, los desarrolladores pueden elegir las capas de procesamiento de streams que mejor se adapten a sus necesidades, lo que les permite disponer siempre de una plataforma adaptada a sus necesidades, incluso a medida que estas cambien o se vuelvan más complejas.
Ahora que Flink tiene una interfaz SQL sólida y madura, tiene sentido empezar por ahí, no solo para los usuarios finales que adoptan el procesamiento de streams, sino también para que Confluent adopte Apache Flink.
Introducing the second issue of the Confluent Chronicles comic book! Trust us, this isn’t your typical eBook. Inside you’ll find a fun and relatable approach to learn about the challenges of streaming processing, the basics of Apache Flink, and why Flink and Kafka are better together.