{"id":183,"date":"2019-04-02T19:40:07","date_gmt":"2019-04-02T18:40:07","guid":{"rendered":"http:\/\/aprenderbigdata.com\/?p=183"},"modified":"2025-03-08T14:53:27","modified_gmt":"2025-03-08T13:53:27","slug":"introduccion-apache-flink","status":"publish","type":"post","link":"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/","title":{"rendered":"Apache Flink: Introducci\u00f3n"},"content":{"rendered":"\n<p>En esta entrada realizamos una introducci\u00f3n a Apache Flink repasando sus aspectos clave. En qu\u00e9 consiste esta herramienta de procesamiento en streaming <strong><a href=\"https:\/\/aprenderbigdata.com\/que-es-el-big-data\/\">Big Data<\/a><\/strong>, c\u00f3mo funciona y cu\u00e1l es su arquitectura.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-499968f5 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button is-style-outline is-style-outline--2\"><a class=\"wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button\" href=\"https:\/\/go.hotmart.com\/E75204047T?SCK=FLINKINTRO\" target=\"_blank\" rel=\"noopener nofollow noreferrer noopener\">Aprende Apache Flink desde Cero<\/a><\/div>\n<\/div>\n\n\n\n<p><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"#formacion\"><img decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/Que-es-Apache-Flink-1024x576.png\" alt=\"Qu\u00e9 es Apache Flink\" class=\"wp-image-1697\" srcset=\"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/Que-es-Apache-Flink-1024x576.png 1024w, https:\/\/aprenderbigdata.com\/wp-content\/uploads\/Que-es-Apache-Flink-300x169.png 300w, https:\/\/aprenderbigdata.com\/wp-content\/uploads\/Que-es-Apache-Flink-768x432.png 768w, https:\/\/aprenderbigdata.com\/wp-content\/uploads\/Que-es-Apache-Flink.png 1280w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenidos<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-69e137016e383\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-69e137016e383\" checked aria-label=\"Alternar\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#Introduccion-al-Streaming\" >Introducci\u00f3n al Streaming<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#Aspectos-clave-de-Apache-Flink\" >Aspectos clave de Apache Flink<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#Operaciones-sin-estado-stateless\" >Operaciones sin estado (stateless)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#Operadores-con-estado-stateful\" >Operadores con estado (stateful)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#Caracteristicas-de-Apache-Flink\" >Caracter\u00edsticas de Apache Flink<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#Control-Temporal-de-Eventos-en-Apache-Flink\" >Control Temporal de Eventos en Apache Flink<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#Tipos-de-Ventanas\" >Tipos de Ventanas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#Librerias-y-Componentes-de-Flink\" >Librer\u00edas y Componentes de Flink<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#Requisitos-de-Flink\" >Requisitos de Flink<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#Despliegue-de-Apache-Flink\" >Despliegue de Apache Flink<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#Ejemplo-de-programa-en-Flink\" >Ejemplo de programa en Flink<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#Curso-recomendado-de-Apache-Flink-Siguientes-Pasos\" >Curso recomendado de Apache Flink: Siguientes Pasos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#Preguntas-Frecuentes-Apache-Flink-%E2%80%93-FAQ\" >Preguntas Frecuentes Apache Flink &#8211; FAQ<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#%C2%BFPara-que-se-usa-Apache-Flink\" >\u00bfPara qu\u00e9 se usa Apache Flink?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#%C2%BFEn-que-se-diferencia-Apache-Flink-de-Apache-Spark\" >\u00bfEn qu\u00e9 se diferencia Apache Flink de Apache Spark?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#%C2%BFApache-Flink-necesita-Hadoop\" >\u00bfApache Flink necesita Hadoop?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\" id=\"introduccion-al-streaming\"><span class=\"ez-toc-section\" id=\"Introduccion-al-Streaming\"><\/span>Introducci\u00f3n al Streaming<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>En la actualidad, los negocios cada vez necesitan interacciones m\u00e1s eficientes para generar ciclos de venta m\u00e1s r\u00e1pidos. Los servicios en tiempo real y las recomendaciones <em>proactivas<\/em> se vuelven activos fundamentales para la actividad de negocio. Estos servicios permiten comunicaciones m\u00e1s r\u00e1pidas con el cliente incluso el uso de notificaciones push en tiempo real.<\/p>\n\n\n\n<p>A continuaci\u00f3n se enumeran algunos casos de uso para aplicaciones de streaming de baja latencia bien conocidos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Detecci\u00f3n de fraude<\/li>\n\n\n\n<li>An\u00e1lisis en videojuegos<\/li>\n\n\n\n<li>Recomendaci\u00f3n de contenidos<\/li>\n\n\n\n<li>Monitorizaci\u00f3n de redes de telecomunicaciones<\/li>\n\n\n\n<li>Optimizaci\u00f3n de b\u00fasquedas<\/li>\n\n\n\n<li>IoT Industrial<\/li>\n\n\n\n<li>Monitorizaci\u00f3n de aplicaciones<\/li>\n<\/ul>\n\n\n\n<p>Las <strong><a href=\"https:\/\/aprenderbigdata.com\/stream-processing\/\">tecnolog\u00edas de procesamiento y anal\u00edtica en streaming<\/a><\/strong> como Apache Flink proporcionan valor r\u00e1pidamente. Ingestando y procesando eventos en tiempo real tanto integradas como parte de una aplicaci\u00f3n de forma independiente.<\/p>\n\n\n\n<p>Tambi\u00e9n permiten reaccionar y responder a los clientes del negocio con muy baja latencia, mejorando la experiencia de usuario. Esta ventaja es muy usada en los smartphones y aplicaciones m\u00f3viles. Tambi\u00e9n se puede aprovechar para desarrollar una interacci\u00f3n continua en las redes sociales.<\/p>\n\n\n\n<p>Cuando hablamos de procesamiento en tiempo real o stream analytics debemos tener en cuenta en qu\u00e9 consiste exactamente el tiempo real. En el caso de tiempos de procesamiento superiores a 1 hora, nos encontrar\u00edamos en un caso de uso de procesamiento batch. De 10 milisegundos a 1 segundo hablar\u00edamos de procesamiento en tiempo real. Con latencias inferiores a 500 milisegundos, generalmente nos referimos a tecnolog\u00edas OLTP. Por \u00faltimo, el tiempo real estricto consistir\u00eda en obtener latencias inferiores a 1 milisegundo, estas aplicaciones y tecnolog\u00edas no suelen ser de prop\u00f3sito general.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aspectos-clave-de-apache-flink\"><span class=\"ez-toc-section\" id=\"Aspectos-clave-de-Apache-Flink\"><\/span>Aspectos clave de Apache Flink<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><strong>Apache Flink<\/strong> es un framework de c\u00f3digo abierto orientado al procesamiento de flujos de datos en streaming de forma distribuida y con alta disponibilidad. El proyecto surgi\u00f3 en el a\u00f1o 2015. Las caracter\u00edsticas m\u00e1s importantes de Apache Flink son las siguientes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Procesamiento de <strong>flujos de datos<\/strong>: Permite obtener resultados en tiempo real a partir de flujos de datos.<\/li>\n\n\n\n<li>Procesamiento <strong>Batch<\/strong>: Procesamiento de datos hist\u00f3ricos y est\u00e1ticos.<\/li>\n\n\n\n<li>Aplicaciones <strong>orientadas a eventos<\/strong>: Se pueden realizar acciones y dar servicios a partir de los datos procesados en tiempo real.<\/li>\n<\/ul>\n\n\n\n<p>Una <strong>Tupla<\/strong> en terminolog\u00eda de streaming consiste en un conjunto de elementos o de tipos de datos simples guardados de forma consecutiva. De esta forma, se define un <strong>Flujo de datos<\/strong> como una secuencia infinita de tuplas.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" width=\"762\" height=\"672\" src=\"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/tupla-procesamiento-streaming.jpg\" alt=\"Flujos de tuplas en procesamiento en Streaming\" class=\"wp-image-3999\" style=\"width:381px;height:336px\" srcset=\"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/tupla-procesamiento-streaming.jpg 762w, https:\/\/aprenderbigdata.com\/wp-content\/uploads\/tupla-procesamiento-streaming-300x265.jpg 300w\" sizes=\"(max-width: 762px) 100vw, 762px\" \/><figcaption class=\"wp-element-caption\">Flujos de tuplas en procesamiento en Streaming<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Sobre un flujo de datos se pueden realizar dos tipos de operaciones:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"operaciones-sin-estado-stateless\"><span class=\"ez-toc-section\" id=\"Operaciones-sin-estado-stateless\"><\/span>Operaciones sin estado (stateless)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Las operaciones sin estado son acciones que obtienen una tupla como resultado de procesar una \u00fanica tupla de entrada. Los m\u00e1s comunes son los siguientes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Map<\/strong>: Transforma el esquema de la tupla en un nuevo esquema.<\/li>\n\n\n\n<li><strong>Filter<\/strong>: Descarga o enruta las tuplas dependiendo de las condiciones.<\/li>\n\n\n\n<li><strong>Union<\/strong>: Combina varias secuencias de tuplas que comparten esquema.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"operadores-con-estado-stateful\"><span class=\"ez-toc-section\" id=\"Operadores-con-estado-stateful\"><\/span>Operadores con estado (stateful)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Son capaces de operar sobre N tuplas de entrada para generar una tupla de salida. Los operadores con estado m\u00e1s comunes son los siguientes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Agregaci\u00f3n<\/strong>: Funciones de agregaci\u00f3n.<\/li>\n\n\n\n<li><strong>Equijoin<\/strong>: Empareja tuplas de dos secuencias con el mismo criterio.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"caracteristicas-de-apache-flink\"><span class=\"ez-toc-section\" id=\"Caracteristicas-de-Apache-Flink\"><\/span>Caracter\u00edsticas de Apache Flink<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Es capaz de procesar datos de entrada fuera de orden o que llegan con <strong>retraso<\/strong> (datos tard\u00edos)<\/li>\n\n\n\n<li>Mantiene el <strong>estado de la aplicaci\u00f3n<\/strong>, pudiendo gestionar decenas de terabytes de estado (agregaci\u00f3n y resumen de datos)<\/li>\n\n\n\n<li>La <strong>garant\u00eda de entrega<\/strong> (processing semantics) es de exactamente una vez (exactly once)<\/li>\n<\/ul>\n\n\n\n<p>Adem\u00e1s, Apache Flink es <strong>Escalable<\/strong> y soporta miles de nodos manteniendo una latencia baja. Puede escalar el sistema de forma autom\u00e1tica (<strong>autoscaling<\/strong>), cambiando din\u00e1micamente el paralelismo de los operadores. Estas operaciones de escalado y las actualizaciones no tienen downtime o periodo de inactividad. El cl\u00faster de Flink siempre est\u00e1 disponible cuando se realizan cambios en el c\u00f3digo, cambios de paralelismo y actualizaciones del framework.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" width=\"3212\" height=\"1054\" src=\"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/2019\/08\/arquitectura-flink.png\" alt=\"Arquitectura Apache Flink\" class=\"wp-image-357\" srcset=\"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/2019\/08\/arquitectura-flink.png 3212w, https:\/\/aprenderbigdata.com\/wp-content\/uploads\/2019\/08\/arquitectura-flink-300x98.png 300w, https:\/\/aprenderbigdata.com\/wp-content\/uploads\/2019\/08\/arquitectura-flink-768x252.png 768w, https:\/\/aprenderbigdata.com\/wp-content\/uploads\/2019\/08\/arquitectura-flink-1024x336.png 1024w\" sizes=\"(max-width: 3212px) 100vw, 3212px\" \/><figcaption class=\"wp-element-caption\">Arquitectura Apache Flink<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Flink tiene dos mecanismos para asegurar su <strong>tolerancia a fallos<\/strong>: los puntos de control o checkpoints y los puntos de guardado o Savepoints.<\/p>\n\n\n\n<p>Los <strong>checkpoints<\/strong> se crean de forma transparente en el sistema y son gestionados por Flink. Se usan para recuperar el estado de forma autom\u00e1tica cuando ocurren fallos no esperados. Cuando termina el trabajo, los checkpoints tambi\u00e9n se eliminan.<\/p>\n\n\n\n<p>Los <strong>savepoints<\/strong> contienen m\u00e1s datos acerca del estado, los gestiona el usuario y no se eliminan con la terminaci\u00f3n del trabajo asociado. Se usan generalmente para controlar las actualizaciones, los cambios de paralelismo y las ventanas de mantenimiento. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"control-temporal-de-eventos-en-apache-flink\"><span class=\"ez-toc-section\" id=\"Control-Temporal-de-Eventos-en-Apache-Flink\"><\/span>Control Temporal de Eventos en Apache Flink<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Existen tres controles temporales importantes en Flink:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Event Time<\/strong>: Momento en el que se cre\u00f3 un evento. Por lo general, se describe mediante una marca de tiempo generada por el sensor o el productor del dato.<\/li>\n\n\n\n<li><strong>Ingestion Time<\/strong>: Momento en el que un evento ingresa en el flujo de datos de Flink en el origen.<\/li>\n\n\n\n<li><strong>Processing Time:<\/strong> Tiempo local de cada operador que realiza una operaci\u00f3n basada en tiempo.<\/li>\n<\/ul>\n\n\n\n<p>Las <strong>ventanas<\/strong> temporales permiten tratar las secuencias infinitas con unos recursos limitados (memoria) dividiendo los datos de entrada en partes finitas. Se basan en la idea de que s\u00f3lo los datos m\u00e1s recientes son relevantes.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/2019\/08\/esquema-tiempo-apache-flink.svg\" alt=\"Control del tiempo en Streaming\" class=\"wp-image-360\" style=\"width:444px;height:210px\"\/><figcaption class=\"wp-element-caption\">Control de tiempo en Flink<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Pueden estar basadas en tiempo o en el n\u00famero de elementos y desplazarse por bloques de elementos o de la forma FIFO. El procesamiento en ventanas permite tener varios niveles de <strong>paralelismo<\/strong>: Paralelismo entre consultas (escalable por consultas) y paralelismo dentro de consultas (escalable por volumen de eventos).<\/p>\n\n\n\n<p>Las ventanas se crean cuando el primer evento que pertenece a la ventana llega al sistema. La ventana vence cuando el tiempo (de evento o de procesamiento) termina y adem\u00e1s pasa el tiempo de retraso m\u00e1ximo definido por el usuario.<\/p>\n\n\n\n<p>Por \u00faltimo, cada ventana tiene un <strong>Trigger<\/strong> que especifica las condiciones para que se aplique la funci\u00f3n de procesamiento. Existe otro concepto llamado <strong>Evictor<\/strong>, que permite controlar el borrado de elementos de la ventana despu\u00e9s del trigger.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"tipos-de-ventanas\"><span class=\"ez-toc-section\" id=\"Tipos-de-Ventanas\"><\/span>Tipos de Ventanas<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Tumbling Windows<\/strong>: Ventanas de tama\u00f1o fijo en el tiempo. No existe solapamiento entre ventanas de este tipo.<\/li>\n\n\n\n<li><strong>Sliding Windows<\/strong>: Asignan elementos a ventanas de un tama\u00f1o fijo, determinado por el valor Window Size. Se define la frecuencia con la que se a\u00f1ade una nueva ventana deslizante (Window Slide). Estas ventanas pueden solaparse si el deslizamiento es menor al tama\u00f1o de la ventana: en este caso los elementos pueden pertenecer a m\u00e1s de una ventana.<\/li>\n\n\n\n<li><strong>Session Windows<\/strong>: Permiten agrupar los elementos recibidos por claves o sesiones de actividad (user). Cada ventana vence cuando no recibe eventos que pertenezcan a ella durante un per\u00edodo de tiempo fijo llamado <em>Session Gap<\/em> (per\u00edodo de inactividad). No existe solapamiento ni un tiempo de inicio y de finalizaci\u00f3n predefinidos.<\/li>\n\n\n\n<li><strong>Global Windows<\/strong>: Asigna todos los elementos con la misma clave a la misma ventana. Esta ventana solo es \u00fatil si se especifica un <em>trigger<\/em>: si no se especifica un trigger no se procesar\u00e1 nada, ya que no tiene fin.<\/li>\n<\/ul>\n\n\n\n<p>Para procesar eventos que llegan al sistema con retraso, es posible extender las ventanas un tiempo establecido (de espera). De esta forma la ventana no vence hasta que no se termina este tiempo de espera.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"librerias-y-componentes-de-flink\"><span class=\"ez-toc-section\" id=\"Librerias-y-Componentes-de-Flink\"><\/span>Librer\u00edas y Componentes de Flink<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Apache Flink tiene dos componentes principales. Por un lado, el Task Manager es el encargado de ejecutar los trabajos de Flink. Por otro lado, el Job Manager se encarga de distribuir estos trabajos en los Task Managers.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>DataStream<\/strong> API: Permite procesar conjuntos infinitos de datos (en modo Streaming).<\/li>\n\n\n\n<li><strong>DataSet<\/strong> API: Permite procesar conjuntos finitos de datos (en modo Batch)<\/li>\n\n\n\n<li>Contiene una librer\u00eda <a href=\"https:\/\/aprenderbigdata.com\/complex-event-processing\/\"><strong>CEP (Complex Event Processing)<\/strong><\/a>.<\/li>\n\n\n\n<li>El lenguaje SQL opera sobre unas abstracciones llamadas tablas.<\/li>\n\n\n\n<li><strong>FlinkML<\/strong> es una librer\u00eda para implementar algoritmos de <strong><a href=\"https:\/\/aprenderbigdata.com\/machine-learning\/\">Machine Learning<\/a><\/strong>.<\/li>\n\n\n\n<li><strong>FlinkSpector<\/strong> permite definir pruebas unitarias sobre flujos de datos y operadores. Para ello ejecuta flujos de datos localmente y se encarga de verificar los resultados con las expectativas definidas.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"requisitos-de-flink\"><span class=\"ez-toc-section\" id=\"Requisitos-de-Flink\"><\/span><strong>Requisitos<\/strong> de Flink<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><a href=\"https:\/\/aprenderbigdata.com\/cursos-java-udemy\/\">Java 8<\/a><\/strong><\/li>\n\n\n\n<li>La API para <a href=\"https:\/\/aprenderbigdata.com\/introduccion-scala\/\"><strong>Scala<\/strong><\/a> es opcional y depende de Scala 2.11<\/li>\n\n\n\n<li>Para tener alta disponibilidad (HA) sin un \u00fanico punto de fallo depende de <a href=\"https:\/\/aprenderbigdata.com\/zookeeper\/\">Apache Zookeeper<\/a><\/li>\n\n\n\n<li>Para configurar la recuperaci\u00f3n ante fallos, Flink necesita alguna forma de almacenamiento distribuido para los checkpoints (HDFS \/  <strong><a href=\"https:\/\/aprenderbigdata.com\/amazon-s3\/\">S3<\/a><\/strong> \/ NFS \/ SAN \/ GFS \/ Kosmos \/ Ceph \/ \u2026)   <\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"despliegue-de-apache-flink\"><span class=\"ez-toc-section\" id=\"Despliegue-de-Apache-Flink\"><\/span>Despliegue de Apache Flink<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Flink tiene un despliegue flexible, pudiendo ejecutar en ecosistemas como YARN, <a href=\"https:\/\/aprenderbigdata.com\/como-crear-tu-propio-framework-apache-mesos\/\"><strong>Mesos<\/strong><\/a>, <a href=\"https:\/\/aprenderbigdata.com\/kubernetes\/\"><strong>Kubernetes<\/strong><\/a>, <a href=\"https:\/\/aprenderbigdata.com\/introduccion-docker\/\"><strong>Docker<\/strong><\/a> o bien de forma standalone con un despliegue independiente.Flink es independiente de <a href=\"https:\/\/aprenderbigdata.com\/hadoop\/\"><strong>Hadoop<\/strong><\/a> pero:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Se integra bien con HDFS, YARN o <a href=\"https:\/\/aprenderbigdata.com\/hbase\/\"><strong>HBase<\/strong><\/a><\/li>\n\n\n\n<li>Flink puede usar <a href=\"https:\/\/aprenderbigdata.com\/hdfs\/\"><strong>HDFS<\/strong><\/a> para leer datos o escribir resultados y checkpoints\/snapshots<\/li>\n\n\n\n<li>Se puede desplegar con <a href=\"https:\/\/aprenderbigdata.com\/hadoop-yarn\/\"><strong>YARN<\/strong><\/a><\/li>\n\n\n\n<li>Se integra con los m\u00f3dulos de seguridad de Kerberos de YARN y HDFS<\/li>\n<\/ul>\n\n\n\n<p>Para ejecutar un trabajo, la manera por defecto es desplegar un fichero JAR con el c\u00f3digo compilado junto a sus dependencias en un cl\u00faster activo. Este procedimiento se puede mejorar con la ayuda de Docker para aumentar la trazabilidad de los trabajos y orquestarlos con Kubernetes. De esta forma, ejecutando Flink en Kubernetes conseguiremos portabilidad, escalabilidad y mayor opciones de monitorizaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ejemplo-de-programa-en-flink\"><span class=\"ez-toc-section\" id=\"Ejemplo-de-programa-en-Flink\"><\/span>Ejemplo de programa en Flink<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>A continuaci\u00f3n, vamos a escribir un ejemplo de c\u00f3digo Java que implementa una aplicaci\u00f3n con Flink. La diferencia en el rendimiento con la API de Java y Scala es despreciable. Los pasos que sigue el ejemplo son los siguientes:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Lee un flujo de n\u00fameros de un topic de <a href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-kafka\/\">Apache Kafka<\/a> representados con un <em>string<\/em> y almacenados todos con la misma clave. (l\u00edneas 7-10)<\/li>\n\n\n\n<li>Se define una ventana de tipo <em>Tumbling<\/em> de 10 segundos. (l\u00ednea 13)<\/li>\n\n\n\n<li>Suma los n\u00fameros seg\u00fan se van procesando. (l\u00edneas 14-25)<\/li>\n\n\n\n<li>Imprime los resultados por consola. (l\u00ednea 26)<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\nStreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();\n\nProperties props = new Properties();\nprops.put(&quot;bootstrap.servers&quot;, &quot;localhost:9092&quot;);\nprops.put(&quot;client.id&quot;, &quot;flink-example&quot;);\n\nFlinkKafkaConsumer&lt;KafkaRecord&gt; kafkaConsumer = new FlinkKafkaConsumer&lt;&gt;(&quot;Topic-1&quot;, new MySchema(), props);\n\nkafkaConsumer.setStartFromLatest();\nDataStream&lt;KafkaRecord&gt; stream = env.addSource(kafkaConsumer);\n\nstream\n.timeWindowAll(Time.seconds(10))\n.reduce(new ReduceFunction&lt;KafkaRecord&gt;() \n {\n   KafkaRecord result = new KafkaRecord();\n\n   @Override\n   public KafkaRecord reduce(KafkaRecord record1, KafkaRecord record2) throws Exception\n   {\n     result.key = record1.key;  \n     result.value = record1.value + record2.value;\n     return result;\n   }\n})\n.print();\n\nenv.execute();\n<\/pre><\/div>\n\n\n<p>En la l\u00ednea 7 se crea un objeto del tipo <em>FlinkKafkaConsumer<\/em> que act\u00faa como fuente de datos del sistema. La clase <em>KafkaRecord<\/em> es la que define el wrapper para los pares clave valor que devuelve el consumidor de Kafka. La clase <em>MySchema<\/em> se encarga de proporcionar el deserializador y la conversi\u00f3n de byte[] a string.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"formacion\"><span class=\"ez-toc-section\" id=\"Curso-recomendado-de-Apache-Flink-Siguientes-Pasos\"><\/span>Curso recomendado de Apache Flink: Siguientes Pasos<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Aprende Apache Flink a fondo con mi curso desde cero. Al final del curso, ser\u00e1s capaz de implementar aplicaciones de procesamiento de datos en tiempo real. El curso te ense\u00f1ar\u00e1 a desenvolverte con Flink en un entorno profesional e implementar soluciones de datos. Est\u00e1 todo guiado y se compone de lecciones te\u00f3ricas y pr\u00e1cticas, terminando con un proyecto paso a paso. <strong>\u00a1Aqu\u00ed abajo tienes un enlace para que puedas aprovechar el cup\u00f3n!<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size\"><strong><a href=\"https:\/\/go.hotmart.com\/E75204047T?SCK=FLINKINTRO\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Apache Flink desde cero: La gu\u00eda esencial<\/a><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<p class=\"responsive-video-wrap clr\"><iframe title=\"Apache Apache Flink desde cero: La gu\u00eda esencial\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/pv_We87noa0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe><\/p>\n<\/div><\/figure>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"preguntas-frecuentes-apache-flink-faq\"><span class=\"ez-toc-section\" id=\"Preguntas-Frecuentes-Apache-Flink-%E2%80%93-FAQ\"><\/span>Preguntas Frecuentes Apache Flink &#8211; FAQ<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h3><span class=\"ez-toc-section\" id=\"%C2%BFPara-que-se-usa-Apache-Flink\"><\/span>\u00bfPara qu\u00e9 se usa Apache Flink?<span class=\"ez-toc-section-end\"><\/span><\/h3>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p id=\"flink-es-un-framework-distribuido-para-procesar-flujos-de-datos-manteniendo-el-estado-y-con-una-alta-escalabilidad\">Flink es un framework distribuido para procesar flujos de datos manteniendo el estado y con una alta escalabilidad.<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h3><span class=\"ez-toc-section\" id=\"%C2%BFEn-que-se-diferencia-Apache-Flink-de-Apache-Spark\"><\/span>\u00bfEn qu\u00e9 se diferencia Apache Flink de Apache Spark?<span class=\"ez-toc-section-end\"><\/span><\/h3>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p id=\"flink-al-contrario-que-spark-ha-sido-disenado-con-una-arquitectura-orientada-al-procesamiento-de-eventos-en-streaming-por-ello-generalmente-flink-tiene-un-mayor-rendimiento-y-procesa-a-nivel-de-eventos-individuales-sin-crear-micro-batches-como-hace-spark-streaming\">Flink, al contrario que Spark, ha sido dise\u00f1ado con una arquitectura orientada al procesamiento de eventos en streaming. Por ello, generalmente Flink tiene un mayor rendimiento y procesa a nivel de eventos individuales, sin crear micro-batches como hace Spark Streaming.<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h3><span class=\"ez-toc-section\" id=\"%C2%BFApache-Flink-necesita-Hadoop\"><\/span>\u00bfApache Flink necesita Hadoop?<span class=\"ez-toc-section-end\"><\/span><\/h3>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p id=\"apache-flink-no-necesita-hadoop-ya-que-es-una-plataforma-de-procesamiento-independiente-flink-tambien-puede-realizar-procesamiento-batch-y-usarse-con-hadoop\">Apache Flink no necesita Hadoop ya que es una plataforma de procesamiento independiente. Flink tambi\u00e9n puede realizar procesamiento batch y usarse con Hadoop.<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\n<script type=\"application\/ld+json\">\n\t{\n\t\t\"@context\": \"https:\/\/schema.org\",\n\t\t\"@type\": \"FAQPage\",\n\t\t\"mainEntity\": [\n\t\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"\u00bfPara qu\u00e9 se usa Apache Flink?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>Flink es un framework distribuido para procesar flujos de datos manteniendo el estado y con una alta escalabilidad.<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t,\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"\u00bfEn qu\u00e9 se diferencia Apache Flink de Apache Spark?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>Flink, al contrario que Spark, ha sido dise\u00f1ado con una arquitectura orientada al procesamiento de eventos en streaming. Por ello, generalmente Flink tiene un mayor rendimiento y procesa a nivel de eventos individuales, sin crear micro-batches como hace Spark Streaming.<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t,\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"\u00bfApache Flink necesita Hadoop?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>Apache Flink no necesita Hadoop ya que es una plataforma de procesamiento independiente. Flink tambi\u00e9n puede realizar procesamiento batch y usarse con Hadoop.<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t\t\t\t]\n\t}\n<\/script>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<div class=\"wp-block-group newsletter-re\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<!-- Begin Brevo Form -->\n<!-- START - We recommend to place the below code in head tag of your website html  -->\n<style>\n  @font-face {\n    font-display: block;\n    font-family: Roboto;\n  }\n\n  @font-face {\n    font-display: fallback;\n    font-family: Roboto;\n    font-weight: 600;\n  }\n\n  @font-face {\n    font-display: fallback;\n    font-family: Roboto;\n    font-weight: 700;\n  }\n\n  #sib-container input:-ms-input-placeholder {\n    text-align: left;\n    font-family: \"Helvetica\", sans-serif;\n    color: #c0ccda;\n  }\n\n  #sib-container input::placeholder {\n    text-align: left;\n    font-family: \"Helvetica\", sans-serif;\n    color: #c0ccda;\n  }\n\n  #sib-container textarea::placeholder {\n    text-align: left;\n    font-family: \"Helvetica\", sans-serif;\n    color: #c0ccda;\n  }\n<\/style>\n<link rel=\"stylesheet\" href=\"https:\/\/sibforms.com\/forms\/end-form\/build\/sib-styles.css\">\n<!--  END - We recommend to place the above code in head tag of your website html -->\n\n<!-- START - We recommend to place the below code where you want the form in your website html  -->\n<div class=\"sib-form\" style=\"text-align: center;\n         background-color: #ffffff;                                 \">\n  <div id=\"sib-form-container\" class=\"sib-form-container\">\n    <div id=\"error-message\" class=\"sib-form-message-panel\" style=\"font-size:16px; text-align:left; font-family:&quot;Helvetica&quot;, sans-serif; color:#661d1d; background-color:#ffeded; border-radius:3px; border-color:#ff4949;max-width:600px;\">\n      <div class=\"sib-form-message-panel__text sib-form-message-panel__text--center\">\n        <svg viewBox=\"0 0 512 512\" class=\"sib-icon sib-notification__icon\">\n          <path d=\"M256 40c118.621 0 216 96.075 216 216 0 119.291-96.61 216-216 216-119.244 0-216-96.562-216-216 0-119.203 96.602-216 216-216m0-32C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm-11.49 120h22.979c6.823 0 12.274 5.682 11.99 12.5l-7 168c-.268 6.428-5.556 11.5-11.99 11.5h-8.979c-6.433 0-11.722-5.073-11.99-11.5l-7-168c-.283-6.818 5.167-12.5 11.99-12.5zM256 340c-15.464 0-28 12.536-28 28s12.536 28 28 28 28-12.536 28-28-12.536-28-28-28z\" \/>\n        <\/svg>\n        <span class=\"sib-form-message-panel__inner-text\">\n                          Tu suscripci\u00f3n no ha podido guardarse. Por favor vuelve a intentarlo.\n                      <\/span>\n      <\/div>\n    <\/div>\n    <div><\/div>\n    <div id=\"success-message\" class=\"sib-form-message-panel\" style=\"font-size:16px; text-align:left; font-family:&quot;Helvetica&quot;, sans-serif; color:#085229; background-color:#e7faf0; border-radius:3px; border-color:#13ce66;max-width:600px;\">\n      <div class=\"sib-form-message-panel__text sib-form-message-panel__text--center\">\n        <svg viewBox=\"0 0 512 512\" class=\"sib-icon sib-notification__icon\">\n          <path d=\"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 464c-118.664 0-216-96.055-216-216 0-118.663 96.055-216 216-216 118.664 0 216 96.055 216 216 0 118.663-96.055 216-216 216zm141.63-274.961L217.15 376.071c-4.705 4.667-12.303 4.637-16.97-.068l-85.878-86.572c-4.667-4.705-4.637-12.303.068-16.97l8.52-8.451c4.705-4.667 12.303-4.637 16.97.068l68.976 69.533 163.441-162.13c4.705-4.667 12.303-4.637 16.97.068l8.451 8.52c4.668 4.705 4.637 12.303-.068 16.97z\" \/>\n        <\/svg>\n        <span class=\"sib-form-message-panel__inner-text\">\n                          Gracias por suscribirte \ud83d\ude42\n                      <\/span>\n      <\/div>\n    <\/div>\n    <div><\/div>\n    <div id=\"sib-container\" class=\"sib-container--large sib-container--vertical\" style=\"text-align:center; background-color:rgba(249,250,251,1); max-width:600px; border-radius:7px; border-width:1px; border-color:#C0CCD9; border-style:solid; direction:ltr\">\n      <form id=\"sib-form\" method=\"POST\" action=\"https:\/\/45b7c589.sibforms.com\/serve\/MUIFAJUHX74hhdn6yVc3sScAj33FFxSgDh2U31jEyO8bXeQmVM0dKSOmYifgH3XNPOP2aDViwVBs9N6McSTxHJEzEx-3nNpomebkJUWOi7_tG2VHKFLj6EeyMplUrpj_VNPjl6BSC9WBN_uOLGnlnyKzUoB1RDaXbz1sakGbox07jJ2toYKwtJ0EyDjJmvQkZmF7Wk4iEcUMBwrU\" data-type=\"subscription\">\n        <div style=\"padding: 8px 0;\">\n          <div class=\"sib-form-block\" style=\"font-size:25px; text-align:center; font-weight:700; font-family:&quot;Helvetica&quot;, sans-serif; color:#3C4858; background-color:transparent; text-align:center\">\n            <p><strong>\u00danete a la Comunidad Big Data<\/strong><\/p>\n          <\/div>\n        <\/div>\n        <div style=\"padding: 8px 0;\">\n          <div class=\"sib-form-block\" style=\"font-size:16px; text-align:center; font-family:&quot;Helvetica&quot;, sans-serif; color:#3C4858; background-color:transparent; text-align:center\">\n            <div class=\"sib-text-form-block\">\n              <p>Tu conocimiento es la herramienta m\u00e1s potente. Suscr\u00edbete a la lista de correo para mantenerte al d\u00eda con los art\u00edculos m\u00e1s \u00fatiles para tu carrera en Big Data y Cloud. Sin spam, nunca.<\/p>\n            <\/div>\n          <\/div>\n        <\/div>\n        <div style=\"padding: 8px 0;\">\n          <div class=\"sib-input sib-form-block\">\n            <div class=\"form__entry entry_block\">\n              <div class=\"form__label-row \">\n\n                <div class=\"entry__field\">\n                  <input class=\"input \" type=\"text\" id=\"EMAIL\" name=\"EMAIL\" autocomplete=\"off\" placeholder=\"TU EMAIL\" data-required=\"true\" required \/>\n                <\/div>\n              <\/div>\n\n              <label class=\"entry__error entry__error--primary\" style=\"font-size:16px; text-align:left; font-family:&quot;Helvetica&quot;, sans-serif; color:#661d1d; background-color:#ffeded; border-radius:3px; border-color:#ff4949;\">\n              <\/label>\n            <\/div>\n          <\/div>\n        <\/div>\n        <div style=\"padding: 8px 0;\">\n          <div class=\"sib-optin sib-form-block\" data-required=\"true\">\n            <div class=\"form__entry entry_mcq\">\n              <div class=\"form__label-row \">\n                <div class=\"entry__choice\" style=\"text-align:center;\">\n                  <label>\n                    <input type=\"checkbox\" class=\"input_replaced\" value=\"1\" id=\"OPT_IN\" name=\"OPT_IN\" required \/>\n                    <span class=\"checkbox checkbox_tick_positive\"\n            style=\"margin-left:\"\n            ><\/span><span style=\"font-size:13px; text-align:left; font-family:&quot;Helvetica&quot;, sans-serif; color:#3C4858; background-color:transparent;\"><p>Acepto la <a href=\"https:\/\/aprenderbigdata.com\/privacidad\/\" target=\"_blank\" rel=\"noopener\">pol\u00edtica de privacidad<\/a><\/p><span data-required=\"*\" style=\"display: inline;\" class=\"entry__label entry__label_optin\"><\/span><\/span> <\/label>\n                <\/div>\n              <\/div>\n              <label class=\"entry__error entry__error--primary\" style=\"font-size:16px; text-align:left; font-family:&quot;Helvetica&quot;, sans-serif; color:#661d1d; background-color:#ffeded; border-radius:3px; border-color:#ff4949;\">\n              <\/label>\n            <\/div>\n          <\/div>\n        <\/div>\n        <div style=\"padding: 8px 0;\">\n          <div class=\"sib-form-block\" style=\"text-align: center\">\n            <button class=\"sib-form-block__button sib-form-block__button-with-loader\" style=\"font-size:13px; text-align:center; font-weight:700; font-family:&quot;Helvetica&quot;, sans-serif; color:#FFFFFF; background-color:#13aff0; border-radius:3px; border-width:0px;\" form=\"sib-form\" type=\"submit\">\n              <svg class=\"icon clickable__icon progress-indicator__icon sib-hide-loader-icon\" viewBox=\"0 0 512 512\">\n                <path d=\"M460.116 373.846l-20.823-12.022c-5.541-3.199-7.54-10.159-4.663-15.874 30.137-59.886 28.343-131.652-5.386-189.946-33.641-58.394-94.896-95.833-161.827-99.676C261.028 55.961 256 50.751 256 44.352V20.309c0-6.904 5.808-12.337 12.703-11.982 83.556 4.306 160.163 50.864 202.11 123.677 42.063 72.696 44.079 162.316 6.031 236.832-3.14 6.148-10.75 8.461-16.728 5.01z\" \/>\n              <\/svg>\n              \u00a1SUSCR\u00cdBEME GRATIS!\n            <\/button>\n          <\/div>\n        <\/div>\n\n        <input type=\"text\" name=\"email_address_check\" value=\"\" class=\"input--hidden\">\n        <input type=\"hidden\" name=\"locale\" value=\"en\">\n      <\/form>\n    <\/div>\n  <\/div>\n<\/div>\n<!-- END - We recommend to place the below code where you want the form in your website html  -->\n\n<!-- START - We recommend to place the below code in footer or bottom of your website html  -->\n<script>\n  window.REQUIRED_CODE_ERROR_MESSAGE = 'Please choose a country code';\n  window.LOCALE = 'en';\n  window.EMAIL_INVALID_MESSAGE = window.SMS_INVALID_MESSAGE = \"La informaci\u00f3n proporcionada no es v\u00e1lida. Por favor, revisa el formato y vuelve a intentarlo.\";\n\n  window.REQUIRED_ERROR_MESSAGE = \"Este campo no puede estar vac\u00edo. \";\n\n  window.GENERIC_INVALID_MESSAGE = \"La informaci\u00f3n proporcionada no es v\u00e1lida. Por favor, revisa el formato y vuelve a intentarlo.\";\n\n  window.translation = {\n    common: {\n      selectedList: '{quantity} list selected',\n      selectedLists: '{quantity} lists selected'\n    }\n  };\n\n  var AUTOHIDE = Boolean(1);\n<\/script>\n<script defer src=\"https:\/\/sibforms.com\/forms\/end-form\/build\/main.js\"><\/script>\n\n<!-- END - We recommend to place the above code in footer or bottom of your website html  -->\n<!-- End Brevo Form -->\n\n\n\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Aprende los aspectos clave de Apache Flink. En qu\u00e9 consiste esta herramienta de procesamiento en streaming para Big Data y su arquitectura.<\/p>\n","protected":false},"author":1,"featured_media":1697,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"ocs-posts-sidebar","ocean_second_sidebar":"0","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"0","ocean_custom_header_template":"0","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"0","ocean_menu_typo_font_family":"0","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"0","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"off","ocean_gallery_id":[],"footnotes":""},"categories":[8],"tags":[12,173,9],"class_list":["post-183","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-herramientas-big-data","tag-faq","tag-hotmart","tag-video","entry","has-media"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Apache Flink: Introducci\u00f3n 2026 - Aprender BIG DATA desde cero<\/title>\n<meta name=\"description\" content=\"\u25b7 Introducci\u00f3n y aspectos clave de Apache Flink. Aprende en qu\u00e9 consiste esta herramienta de procesamiento en streaming BIG DATA.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Apache Flink: Introducci\u00f3n 2026 - Aprender BIG DATA desde cero\" \/>\n<meta property=\"og:description\" content=\"\u25b7 Introducci\u00f3n y aspectos clave de Apache Flink. Aprende en qu\u00e9 consiste esta herramienta de procesamiento en streaming BIG DATA.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/\" \/>\n<meta property=\"og:site_name\" content=\"Aprender BIG DATA\" \/>\n<meta property=\"article:published_time\" content=\"2019-04-02T18:40:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-08T13:53:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/Que-es-Apache-Flink.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Oscar Fernandez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/Que-es-Apache-Flink.png\" \/>\n<meta name=\"twitter:creator\" content=\"@oscarfmdc\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oscar Fernandez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/introduccion-apache-flink\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/introduccion-apache-flink\\\/\"},\"author\":{\"name\":\"Oscar Fernandez\",\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/#\\\/schema\\\/person\\\/321e79dd84000e4b71b0dac998d5c707\"},\"headline\":\"Apache Flink: Introducci\u00f3n\",\"datePublished\":\"2019-04-02T18:40:07+00:00\",\"dateModified\":\"2025-03-08T13:53:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/introduccion-apache-flink\\\/\"},\"wordCount\":1935,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/introduccion-apache-flink\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/aprenderbigdata.com\\\/wp-content\\\/uploads\\\/Que-es-Apache-Flink.png\",\"keywords\":[\"FAQ\",\"Hotmart\",\"Video\"],\"articleSection\":[\"Herramientas Big Data\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/aprenderbigdata.com\\\/introduccion-apache-flink\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/introduccion-apache-flink\\\/\",\"url\":\"https:\\\/\\\/aprenderbigdata.com\\\/introduccion-apache-flink\\\/\",\"name\":\"Apache Flink: Introducci\u00f3n 2026 - Aprender BIG DATA desde cero\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/introduccion-apache-flink\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/introduccion-apache-flink\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/aprenderbigdata.com\\\/wp-content\\\/uploads\\\/Que-es-Apache-Flink.png\",\"datePublished\":\"2019-04-02T18:40:07+00:00\",\"dateModified\":\"2025-03-08T13:53:27+00:00\",\"description\":\"\u25b7 Introducci\u00f3n y aspectos clave de Apache Flink. Aprende en qu\u00e9 consiste esta herramienta de procesamiento en streaming BIG DATA.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/introduccion-apache-flink\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/aprenderbigdata.com\\\/introduccion-apache-flink\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/introduccion-apache-flink\\\/#primaryimage\",\"url\":\"https:\\\/\\\/aprenderbigdata.com\\\/wp-content\\\/uploads\\\/Que-es-Apache-Flink.png\",\"contentUrl\":\"https:\\\/\\\/aprenderbigdata.com\\\/wp-content\\\/uploads\\\/Que-es-Apache-Flink.png\",\"width\":1280,\"height\":720,\"caption\":\"Qu\u00e9 es Apache Flink\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/introduccion-apache-flink\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/aprenderbigdata.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Apache Flink: Introducci\u00f3n\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/#website\",\"url\":\"https:\\\/\\\/aprenderbigdata.com\\\/\",\"name\":\"Aprender BIG DATA\",\"description\":\"Aprende Big Data desde cero\",\"publisher\":{\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/aprenderbigdata.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/#organization\",\"name\":\"AprenderBigData\",\"url\":\"https:\\\/\\\/aprenderbigdata.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/aprenderbigdata.com\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/cropped-favicon.png\",\"contentUrl\":\"https:\\\/\\\/aprenderbigdata.com\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/cropped-favicon.png\",\"width\":512,\"height\":512,\"caption\":\"AprenderBigData\"},\"image\":{\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/aprenderbigdata.com\\\/#\\\/schema\\\/person\\\/321e79dd84000e4b71b0dac998d5c707\",\"name\":\"Oscar Fernandez\",\"description\":\"Arquitecto de Datos con m\u00e1s de 10 a\u00f1os de experiencia en el sector del Big Data. Autor de cursos de formaci\u00f3n en tecnolog\u00edas Big Data, Cloud y Streaming completados por m\u00e1s de 7000 alumnos en Udemy y otras plataformas. Miembro de la Apache Software Foundation desde 2019.\",\"sameAs\":[\"instagram.com\\\/oscarfmdc\",\"linkedin.com\\\/in\\\/oscarfmdc\\\/\",\"https:\\\/\\\/x.com\\\/oscarfmdc\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCBqzJ1QI3jkkIYXLL9gVpWQ\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Apache Flink: Introducci\u00f3n 2026 - Aprender BIG DATA desde cero","description":"\u25b7 Introducci\u00f3n y aspectos clave de Apache Flink. Aprende en qu\u00e9 consiste esta herramienta de procesamiento en streaming BIG DATA.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/","og_locale":"es_ES","og_type":"article","og_title":"Apache Flink: Introducci\u00f3n 2026 - Aprender BIG DATA desde cero","og_description":"\u25b7 Introducci\u00f3n y aspectos clave de Apache Flink. Aprende en qu\u00e9 consiste esta herramienta de procesamiento en streaming BIG DATA.","og_url":"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/","og_site_name":"Aprender BIG DATA","article_published_time":"2019-04-02T18:40:07+00:00","article_modified_time":"2025-03-08T13:53:27+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/Que-es-Apache-Flink.png","type":"image\/png"}],"author":"Oscar Fernandez","twitter_card":"summary_large_image","twitter_image":"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/Que-es-Apache-Flink.png","twitter_creator":"@oscarfmdc","twitter_misc":{"Escrito por":"Oscar Fernandez","Tiempo de lectura":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#article","isPartOf":{"@id":"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/"},"author":{"name":"Oscar Fernandez","@id":"https:\/\/aprenderbigdata.com\/#\/schema\/person\/321e79dd84000e4b71b0dac998d5c707"},"headline":"Apache Flink: Introducci\u00f3n","datePublished":"2019-04-02T18:40:07+00:00","dateModified":"2025-03-08T13:53:27+00:00","mainEntityOfPage":{"@id":"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/"},"wordCount":1935,"commentCount":0,"publisher":{"@id":"https:\/\/aprenderbigdata.com\/#organization"},"image":{"@id":"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#primaryimage"},"thumbnailUrl":"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/Que-es-Apache-Flink.png","keywords":["FAQ","Hotmart","Video"],"articleSection":["Herramientas Big Data"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/","url":"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/","name":"Apache Flink: Introducci\u00f3n 2026 - Aprender BIG DATA desde cero","isPartOf":{"@id":"https:\/\/aprenderbigdata.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#primaryimage"},"image":{"@id":"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#primaryimage"},"thumbnailUrl":"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/Que-es-Apache-Flink.png","datePublished":"2019-04-02T18:40:07+00:00","dateModified":"2025-03-08T13:53:27+00:00","description":"\u25b7 Introducci\u00f3n y aspectos clave de Apache Flink. Aprende en qu\u00e9 consiste esta herramienta de procesamiento en streaming BIG DATA.","breadcrumb":{"@id":"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#primaryimage","url":"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/Que-es-Apache-Flink.png","contentUrl":"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/Que-es-Apache-Flink.png","width":1280,"height":720,"caption":"Qu\u00e9 es Apache Flink"},{"@type":"BreadcrumbList","@id":"https:\/\/aprenderbigdata.com\/introduccion-apache-flink\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/aprenderbigdata.com\/"},{"@type":"ListItem","position":2,"name":"Apache Flink: Introducci\u00f3n"}]},{"@type":"WebSite","@id":"https:\/\/aprenderbigdata.com\/#website","url":"https:\/\/aprenderbigdata.com\/","name":"Aprender BIG DATA","description":"Aprende Big Data desde cero","publisher":{"@id":"https:\/\/aprenderbigdata.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/aprenderbigdata.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/aprenderbigdata.com\/#organization","name":"AprenderBigData","url":"https:\/\/aprenderbigdata.com\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/aprenderbigdata.com\/#\/schema\/logo\/image\/","url":"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/2019\/08\/cropped-favicon.png","contentUrl":"https:\/\/aprenderbigdata.com\/wp-content\/uploads\/2019\/08\/cropped-favicon.png","width":512,"height":512,"caption":"AprenderBigData"},"image":{"@id":"https:\/\/aprenderbigdata.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/aprenderbigdata.com\/#\/schema\/person\/321e79dd84000e4b71b0dac998d5c707","name":"Oscar Fernandez","description":"Arquitecto de Datos con m\u00e1s de 10 a\u00f1os de experiencia en el sector del Big Data. Autor de cursos de formaci\u00f3n en tecnolog\u00edas Big Data, Cloud y Streaming completados por m\u00e1s de 7000 alumnos en Udemy y otras plataformas. Miembro de la Apache Software Foundation desde 2019.","sameAs":["instagram.com\/oscarfmdc","linkedin.com\/in\/oscarfmdc\/","https:\/\/x.com\/oscarfmdc","https:\/\/www.youtube.com\/channel\/UCBqzJ1QI3jkkIYXLL9gVpWQ"]}]}},"_links":{"self":[{"href":"https:\/\/aprenderbigdata.com\/wp-json\/wp\/v2\/posts\/183","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aprenderbigdata.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aprenderbigdata.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aprenderbigdata.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aprenderbigdata.com\/wp-json\/wp\/v2\/comments?post=183"}],"version-history":[{"count":1,"href":"https:\/\/aprenderbigdata.com\/wp-json\/wp\/v2\/posts\/183\/revisions"}],"predecessor-version":[{"id":13609,"href":"https:\/\/aprenderbigdata.com\/wp-json\/wp\/v2\/posts\/183\/revisions\/13609"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aprenderbigdata.com\/wp-json\/wp\/v2\/media\/1697"}],"wp:attachment":[{"href":"https:\/\/aprenderbigdata.com\/wp-json\/wp\/v2\/media?parent=183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aprenderbigdata.com\/wp-json\/wp\/v2\/categories?post=183"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aprenderbigdata.com\/wp-json\/wp\/v2\/tags?post=183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}