
[26/01/2022] Los datos de streaming, también llamado procesamiento de flujo de eventos, generalmente se discuten en el contexto de big data. Son datos que se generan continuamente, a menudo por miles de fuentes de datos, como sensores o registros de servidores. Por lo general, los registros de datos de streaming son pequeños -unos pocos kilobytes cada uno- pero hay una gran cantidad y, en muchos casos, la transmisión continúa sin detenerse.
[Reciba lo último de CIO Perú suscribiéndose a nuestro newsletter semanal]
Los datos históricos, por otro lado, normalmente pasan por un proceso de ETL por lotes (extracción, transformación y carga) antes de ingresar a una base de datos de análisis, como un almacén de datos, un lago de datos o una casa de lago de datos. Eso está bien si no hay prisa, pero es habitual que se necesite procesar los datos de streaming rápidamente para poder actuar sobre los resultados lo más cerca posible del tiempo real.
El software de procesamiento de datos de streaming por lo general analiza los datos de manera incremental, y realiza agregaciones y correlaciones en tiempo real, filtrado y muestreo. La transmisión también se almacena, de modo que pueda contribuir al registro histórico. El procesamiento incremental se puede realizar registro por registro o en ventanas de tiempo graduales.
Al analizar los datos de streaming en tiempo real, se pueden detectar eventos inusuales, desviaciones significativas de los valores normales y tendencias en desarrollo. Eso puede servir para dar respuestas en tiempo real, tales como encender el riego cuando un campo se está secando, o comprar una acción cuando su valor ha caído por debajo de un objetivo fijado. Entre las fuentes de datos de streaming se incluyen:
- Sensores, como los de las máquinas industriales, vehículos y maquinaria agrícola
- Datos de precios de transacciones bursátiles de las bolsas de valores
- Datos de ubicación de dispositivos móviles
- Clics en propiedades web
- Interacciones de juegos
- Registros del servidor
- Transacciones de base de datos
Enfoques para el procesamiento de datos de streaming
Hay tres formas de manejar los datos de streaming: procesarlos por lotes en intervalos que van desde horas hasta días; procesar la transmisión en tiempo real, o hacer ambas cosas en un proceso híbrido.
El procesamiento por lotes tiene la ventaja de poder realizar análisis profundos -que incluye aprendizaje automático-, y la desventaja de tener una latencia alta. El procesamiento de transmisiones tiene la ventaja de la baja latencia y la desventaja de que solo puede realizar análisis simples, como calcular los valores promedio durante una ventana de tiempo y marcar las desviaciones de los valores esperados.
El procesamiento híbrido combina ambos métodos y obtiene los beneficios de ambos. En general, los datos se procesan como una transmisión y, simultáneamente, se ramifican hacia el almacenamiento para su posterior procesamiento por lotes. Para dar un ejemplo, consideremos un monitor acústico conectado a una máquina industrial. El procesador de transmisión puede detectar un chirrido anormal y emitir una alerta; el procesador por lotes puede invocar un modelo para predecir cuánto tiempo falta para la falla en función del chirrido a medida que avanza, y programar el mantenimiento de la máquina mucho antes de que se averíe.
Software para el procesamiento de datos de streaming
Amazon Kinesis permite recopilar, procesar y analizar datos de streaming en tiempo real a escala. Kinesis ofrece tres servicios para datos (Data Streams, Data Firehose y Data Analytics) y uno para medios (Video Streams).
Kinesis Data Streams es un servicio de ingestión que puede capturar de forma continua gigabytes de datos por segundo, desde cientos de miles de fuentes. Kinesis Data Analytics puede procesar transmisiones de datos en tiempo real con SQL o Apache Flink. Kinesis Data Firehose puede capturar, transformar y cargar transmisiones de datos en los almacenes de datos de AWS para realizar análisis casi en tiempo real con las herramientas de inteligencia de negocios existentes. Se pueden usar las funciones sin servidor de AWS Lambda en lugar de Kinesis Data Analytics, si lo que se busca es procesar la transmisión con un programa en lugar de SQL o Flink.
Apache Flink es un framework de código abierto en Java/Scala/Python y un motor de procesamiento distribuido que realiza cálculos de estado en flujos de datos ilimitados y acotados. Flink ha sido diseñado para ejecutarse en todos los entornos de clúster comunes, y realizar cálculos a velocidad in-memory y en cualquier escala. Se integra con todos los gestores de recursos de clúster comunes, como Hadoop YARN, Apache Mesos y Kubernetes, pero también puede ejecutarse como un clúster independiente.
Apache Kafka es una plataforma de transmisión de eventos distribuida y de código abierto en Java/Scala para la canalización de datos de alto rendimiento, análisis de streaming, integración de datos y aplicaciones de misión crítica. Los eventos de Kafka se organizan y almacenan de forma duradera por temas (topics). Kafka fue originalmente desarrollado en LinkedIn. Tiene cinco API principales:
- Admin API para gestionar e inspeccionar temas, brokers y otros objetos de Kafka.
- Producer API para publicar (escribir) un flujo de eventos en uno o más temas de Kafka.
- Consumer API para suscribirse (para leer) uno o más temas y procesar el flujo de eventos producidos en ellos.
- Kafka Streams API para implementar microservicios y aplicaciones de procesamiento de flujo. La Streams API proporciona funciones de alto nivel para procesar flujos de eventos, incluyendo transformaciones, operaciones con estado como agregaciones y uniones, ventanas, procesamiento basado en la hora del evento y más. El input se lee de uno o más temas para generar un output a uno o más temas, transformando de manera efectiva los flujos de entrada en flujos de salida.
- Kafka Connect API para crear y ejecutar conectores de importación/exportación de datos reutilizables que consumen (leen) o producen (escriben) flujos de eventos desde y hacia sistemas y aplicaciones externas para que puedan integrarse con Kafka. Por ejemplo, un conector a una base de datos relacional como PostgreSQL podría capturar cada uno de los cambios en un conjunto de tablas. Sin embargo, en la práctica, normalmente no necesita implementar sus propios conectores porque la comunidad de Kafka ya proporciona cientos de conectores listos para usar.
Apache Pulsar es una plataforma de streaming y mensajería de código abierto, distribuida, en Java/C++/Python, de publicación y suscripción. Pulsar se desarrolló originalmente en Yahoo. Sus características incluyen:
Apache Samza es un framework de procesamiento de transmisiones en Scala/Java, de código abierto y distribuido que se desarrolló originalmente en LinkedIn, junto con Apache Kafka. Samza le permite crear aplicaciones con estado que procesan datos en tiempo real desde múltiples fuentes, incluyendo Apache Kafka. Las características de Samza incluyen:
- Una API unificada que le permite describir la lógica de su aplicación de manera independiente de su fuente de datos. La misma API puede procesar datos por lotes y de streaming.
- La capacidad de procesar y transformar datos de la nube y fuentes locales. Samza ofrece integraciones incorporadas con Apache Kafka, AWS Kinesis, Azure Event Hubs (Kafka como servicio nativo de Azure), Elasticsearch y Apache Hadoop.
- Fácil integración con aplicaciones existentes que eliminan la necesidad de activar y operar un clúster separado para el procesamiento de transmisiones. Samza puede utilizarse como una biblioteca de cliente incrustada en aplicaciones Java/Scala.
- Opciones de implementación flexibles que le permiten ejecutar aplicaciones en cualquier lugar, desde nubes públicas hasta entornos en contenedores y hardware bare-metal.
- La capacidad de ejecutar el procesamiento de transmisiones como un servicio gestionado mediante la integración con gestores de clústeres populares como Apache YARN.
- Tolerancia a fallas que migra de manera transparente las tareas y sus estados asociados en caso de deficiencias. Samza admite la afinidad de hosts y los puntos de control incrementales que permiten una rápida recuperación ante fallas.
- Escalabilidad masiva. Samza ha sido probado en aplicaciones que utilizan varios terabytes de estado y se ejecutan en miles de núcleos. Impulsa a varias empresas grandes, entre las que se encuentran LinkedIn, Uber, TripAdvisor y Slack.
Apache Spark es un motor multilingüe de código abierto, escrito principalmente en Scala, para ejecutar ingeniería de datos, ciencia de datos y aprendizaje automático en clústeres o máquinas de un solo nodo. Maneja datos por lotes y datos de streaming en tiempo real. Spark se originó en UC Berkeley, y los autores de Spark fundaron Databricks.
Apache Storm es un framework de cálculo de procesamiento de transmisiones distribuido y de código abierto, escrito principalmente en Clojure. En Storm, un flujo es una secuencia ilimitada de tuplas que se procesa y crea en paralelo de forma distribuida. Una topología es un gráfico de spouts y bolts que están conectados con agrupaciones de flujos. Las topologías definen la lógica que procesa los flujos. Un spout es una fuente de flujos en una topología. Todo el procesamiento en las topologías se realiza en bolts. Storm se integra con muchos otros sistemas y bibliotecas, incluidos Kafka, Cassandra, Redis y Kinesis.
Azure Stream Analytics es un motor de análisis en tiempo real y procesamiento de eventos complejos que está diseñado para analizar y procesar grandes volúmenes de datos de streaming procedentes de múltiples fuentes simultáneamente. Se pueden identificar patrones y relaciones en la información extraída de una serie de fuentes de entrada, que incluyen dispositivos, sensores, flujos de clics, feeds de redes sociales y aplicaciones. Estos patrones pueden ser utilizados para desencadenar acciones e iniciar flujos de trabajo, como crear alertas, enviar información a una herramienta de informes o almacenar datos transformados para su uso posterior.
Confluent es una adaptación comercial de Apache Kafka realizada por los creadores originales de Kafka, que se ofrece para ser implementada en las instalaciones o en la nube. Confluent Cloud se reconstruyó desde cero como un servicio nativo de la nube sin servidor, elástico, rentable y completamente gestionado, que se ejecuta en AWS, Microsoft Azure y Google Cloud Platform.
Google Cloud Dataflow es un servicio de procesamiento de datos por lotes y flujo unificado, sin servidor, completamente gestionado, basado en Apache Beam. Apache Beam es un SDK unificado, originalmente de Google, para Dataflow, Flink, Spark y Hazelcast Jet.
Ververica es una plataforma de procesamiento de transmisiones empresariales de los creadores originales de Apache Flink. Proporciona multi-tenancy, autenticación, control de acceso basado en roles y escalado automático para Apache Flink.
En resumen, los datos de streaming se generan continuamente por miles de fuentes de datos. Cada registro suele tener unos pocos kilobytes de datos. Muchas veces se prefiere un esquema híbrido para analizar rápidamente los registros en tiempo real y almacenar los datos para un análisis profundo adicional. Existen buenas opciones de plataformas de streaming de eventos; muchas son proyectos de Apache gratuitos y de código abierto, y otras son mejoras comerciales de los proyectos Apache.
Basado en el artículo de Martin Heller (InfoWorld) y editado por CIO Perú