Llegamos a ustedes gracias a:



Reportajes y análisis

Cómo elegir una plataforma de streaming de datos

[04/03/2022] Los datos en flujo se generan continuamente, a menudo a través de miles de fuentes de datos, como sensores o registros de servidores. Los registros de datos en flujo suelen ser pequeños, quizá de unos pocos kilobytes cada uno, pero son muchos y, en muchos casos, el flujo continúa sin parar. En este artículo, proporcionaremos algunos antecedentes y discutiremos cómo elegir una plataforma de streaming de datos.

[Reciba lo último de CIO Perú suscribiéndose a nuestro newsletter semanal]

¿Cómo funcionan las plataformas de streaming de datos?

Ingesta y exportación de datos. En general, tanto la ingestión como la exportación de datos se gestionan a través de conectores de datos especializados para los sistemas foráneos. En algunos casos hay un proceso ETL (extraer, transformar y cargar) o ELT (extraer, cargar y transformar) para reordenar, limpiar y acondicionar los datos para su destino.

La ingesta de datos en flujo suele leer los datos generados por múltiples fuentes, a veces miles de ellas, como en el caso de los dispositivos IoT (Internet de las cosas, por sus siglas en inglés). La exportación de datos se realiza a veces a un almacén de datos o a un lago de datos para el análisis profundo y el aprendizaje automático.

Pub/sub y temas. Muchas plataformas de streaming de datos, como Apache Kafka y Apache Pulsar, implementan un modelo de publicación y suscripción, con datos organizados en temas. Los datos ingeridos pueden ser etiquetados con uno o más temas, de modo que los clientes suscritos a cualquiera de esos temas pueden recibir los datos. Por ejemplo, en un caso de uso de publicación de noticias en línea, un artículo sobre el discurso de un político podría etiquetarse como Noticias de última hora, Noticias de EE.UU. y Política, de modo que pudiera ser incluido en cada una de esas secciones por el software de diseño de páginas bajo la supervisión del editor (humano) de la sección.

Análisis de datos. Las plataformas de flujo de datos suelen incluir la posibilidad de realizar análisis en dos puntos de la cadena. El primero forma parte del flujo en tiempo real, y el segundo está en un punto final persistente. Por ejemplo, Kafka tiene capacidades analíticas simples en tiempo real en su API de flujos, y también puede llamar a Apache Samza o a otro procesador de análisis para realizar cálculos más complejos en tiempo real. Existen oportunidades adicionales para el análisis y el aprendizaje automático una vez que los datos se han publicado en un almacén de datos persistente. Este procesamiento puede ser casi en tiempo real o un proceso periódico por lotes.

Las funciones sin servidor, como AWS Lambda, pueden utilizarse con flujos de datos para analizar registros de datos de streaming mediante programas personalizados. Las funciones sin servidor son una alternativa a los procesadores de análisis de flujos como Apache Flink.

Agrupación. Las plataformas de streaming de datos rara vez son instancias únicas, excepto para las instalaciones de desarrollo y prueba. Las plataformas de streaming de producción necesitan escalar, por lo que suelen ejecutarse como clústeres de nodos. La última forma de implementar esto para el streaming de eventos en la nube es en una plataforma elástica y sin servidor como Confluent Cloud.

[¿Qué son los datos de streaming? Explicación del procesamiento de flujo de eventos]

Casos de uso de streaming

La siguiente lista de casos de uso proviene de la documentación de Kafka de código abierto:

  • Procesar pagos y transacciones financieras en tiempo real, como en bolsas de valores, bancos y seguros.
  • Para rastrear y supervisar autos, camiones, flotas y envíos en tiempo real, como en la logística y la industria del automóvil.
  • Para capturar y analizar continuamente los datos de los sensores de los dispositivos IoT u otros equipos, como en las fábricas y los parques eólicos.
  • Recoger y reaccionar inmediatamente a las interacciones y pedidos de los clientes, como en el comercio minorista, la industria hotelera y de viajes, y las aplicaciones móviles.
  • Para supervisar a los pacientes en la atención hospitalaria y predecir los cambios de estado para garantizar un tratamiento oportuno en caso de emergencia.
  • Para conectar, almacenar y poner a disposición los datos producidos por las diferentes divisiones de una empresa.
  • Para servir de base a plataformas de datos, arquitecturas basadas en eventos y microservicios.

Kafka también enumera casos de uso de clientes nombrados, por ejemplo: The New York Times utiliza Apache Kafka y la API Kafka Streams para almacenar y distribuir, en tiempo real, los contenidos publicados a las distintas aplicaciones y sistemas que los ponen a disposición de los lectores.

Criterios para elegir una plataforma de streaming de datos

Los indicadores clave de rendimiento (KPI) para las plataformas de streaming de datos son la tasa de eventos, el rendimiento (tasa de eventos por tamaño de los mismos), la latencia, la fiabilidad y el número de temas (para las arquitecturas pub-sub). El escalado puede llevarse a cabo añadiendo nodos en una geometría de clústeres, lo que también aumenta la fiabilidad. El escalado es automático en las plataformas sin servidor. No todas las plataformas de streaming de datos cumplirán necesariamente con todos sus KPI.

La compatibilidad con el lenguaje de programación del cliente puede ser un elemento diferenciador entre las plataformas de streaming de datos, ya que sus propios desarrolladores o consultores escribirán las aplicaciones del cliente. Por ejemplo, Apache Kafka, de código abierto, ofrece oficialmente la posibilidad de llamar a la API de flujos desde Java o Scala (ambos lenguajes JVM), pero existe un proyecto comunitario llamado librdkafka que admite otros lenguajes para los clientes, como C/C++, Go, .NET y Python. Confluent mantiene su propio conjunto oficial y firmado de binarios para librdkafka.

En cambio, Apache Storm se diseñó desde el principio para que se pudiera utilizar con cualquier lenguaje de programación, a través del compilador de lenguajes cruzados Apache Thrift. Apache Pulsar soporta clientes en Java, Go, Python, C++, Node.js, WebSocket y C#. La API de Amazon Kinesis Streams es compatible con todos los lenguajes que tienen un SDK o CDK de Amazon: Java, JavaScript, .NET, PHP, Python, Ruby, Go, C++ y Swift.

La compatibilidad con las conexiones puede ser otro elemento diferenciador. Lo ideal es que los conectores para todas sus fuentes de datos ya estén disponibles y probados. Por ejemplo, Confluent tiene una lista de más de 120 conectores disponibles para Kafka, algunos solo de fuente (por ejemplo, Splunk), otros solo de destino (por ejemplo, Snowflake), y algunos tanto de destino como de fuente (por ejemplo, Microsoft SQL Server). La lista de Confluent incluye conectores desarrollados por la comunidad. Si necesita escribir sus propios conectores Kafka en Java, puedes utilizar la API Kafka Connect.

Tiene que tener en cuenta las ubicaciones de sus fuentes y destinos de datos cuando decida dónde alojar su plataforma de streaming de datos. En general, se quiere minimizar la latencia del flujo, lo que implica mantener los componentes cerca unos de otros. Por otro lado, algunas de las plataformas de streaming de datos admiten clústeres distribuidos geográficamente, lo que puede reducir la latencia para fuentes y destinos lejanos.

También hay que tener en cuenta la capacidad de gestión de las plataformas de streaming de datos candidatas. Algunas plataformas tienen la reputación de ser difíciles de configurar y mantener a menos que se tenga experiencia en su manejo. Otras, en particular los servidores en la nube con soporte comercial, tienen la reputación de ser muy fáciles de gestionar.

Principales plataformas y servicios de transmisión de datos

Amazon Kinesis: Amazon Kinesis le permite recopilar, procesar y analizar datos de streaming en tiempo real a escala. Tiene 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 continuamente gigabytes de datos por segundo desde miles de fuentes. Kinesis Data Analytics puede procesar flujos de datos en tiempo real con SQL o Apache Flink. Kinesis Data Firehose puede capturar, transformar y cargar flujos de datos en los almacenes de datos de AWS para realizar análisis casi en tiempo real con las herramientas de inteligencia empresarial existentes. Puede utilizar las funciones sin servidor de AWS Lambda en lugar de Kinesis Data Analytics si desea procesar el flujo con un programa en lugar de utilizar SQL o Flink.

Apache Flink: Apache Flink es un marco de trabajo Java/Scala/Python de código abierto y un motor de procesamiento distribuido para cálculos con estado sobre flujos de datos ilimitados y limitados. Flink ha sido diseñado para ejecutarse en todos los entornos de clúster habituales y realizar cálculos a velocidad en memoria y a cualquier escala. Flink se integra con los gestores de recursos de clúster más comunes, como Hadoop YARN, Apache Mesos y Kubernetes, pero también puede funcionar como un clúster independiente.

Apache Kafka: Apache Kafka es una plataforma de streaming de eventos distribuidos Java/Scala de código abierto para pipelines 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 en temas. Kafka se desarrolló originalmente en LinkedIn, y actualmente tiene la mayor parte de la cuota de mercado de streaming de eventos, incluida la versión comercial de Confluent.

Kafka tiene cinco APIs principales:

  • Admin API, para gestionar e inspeccionar temas, corredores y otros objetos de Kafka.
  • API Produce, para publicar (escribir) un flujo de eventos en uno o más temas de Kafka.
  • API Consumer, para suscribirse a (leer) uno o más temas y procesar el flujo de eventos producidos en ellos.
  • Kafka Streams API, para implementar aplicaciones de procesamiento de flujos y microservicios. Proporciona funciones de alto nivel para procesar flujos de eventos, incluyendo transformaciones, operaciones de estado como agregaciones y uniones, ventanas, procesamiento basado en el tiempo del evento, y más. La entrada se lee de uno o más temas para generar la salida a uno o más temas, transformando efectivamente los flujos de entrada en flujos de salida.
  • Kafka Connect API, para construir 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 cambio en un conjunto de tablas. Sin embargo, en la práctica, normalmente no es necesario implementar sus propios conectores porque la comunidad de Kafka ya proporciona cientos de conectores listos para usar.

Apache Pulsar: Apache Pulsar es una plataforma de código abierto, nativa de la nube, de mensajería pub-sub distribuida en Java/C++/Python y de streaming. Pulsar se desarrolló originalmente en Yahoo. Las características de Pulsar incluyen:

Apache Samza: Apache Samza es un marco de procesamiento de flujos distribuido de código abierto, Scala/Java, que se desarrolló originalmente en LinkedIn, junto con (Apache) Kafka. Samza permite construir aplicaciones con estado que procesan datos en tiempo real desde múltiples fuentes, incluyendo Apache Kafka. Las características de Samza incluyen:

  • API unificada: Una API sencilla para describir la lógica de la aplicación de forma independiente de la fuente de datos. La misma API puede procesar tanto datos por lotes como en streaming.
  • Conexión a todos los niveles: Procese y transforme datos de cualquier fuente. Samza ofrece integraciones incorporadas con Apache Kafka, AWS Kinesis, Azure Event Hubs (Kafka nativo de Azure como servicio), Elasticsearch y Apache Hadoop. Además, es bastante fácil de integrar con sus propias fuentes.
  • Samza como biblioteca integrada: Integrar con sus aplicaciones existentes y eliminar la necesidad de girar y operar un clúster separado para el procesamiento de flujos. Samza puede utilizarse como una biblioteca cliente ligera incrustada en aplicaciones Java/Scala.
  • Escribe una vez, ejecuta en cualquier lugar: Opciones de despliegue flexibles para ejecutar aplicaciones en cualquier lugar, desde nubes públicas hasta entornos en contenedores o hardware bare-metal.
  • Samza como servicio gestionado: Ejecute el procesamiento de flujos como un servicio gestionado mediante la integración con gestores de clústeres populares, incluyendo Apache YARN.
  • Tolerancia a fallas: Migra de forma transparente las tareas junto con su estado asociado en caso de fallas. Samza es compatible con la afinidad de hosts y la comprobación incremental para permitir una rápida recuperación de las fallas.
  • Escala masiva: Probado en aplicaciones que utilizan varios terabytes de estado y se ejecutan en miles de núcleos. Samza es la base de muchas grandes empresas, como LinkedIn, Uber, TripAdvisor y Slack.

Apache Spark: Apache Spark es un motor multilingüe, escrito principalmente en Scala, para ejecutar ingeniería de datos, ciencia de datos y aprendizaje automático en máquinas de un solo nodo o en clústeres. Maneja tanto datos por lotes como datos en tiempo real. Spark se originó en U.C. Berkeley, y los autores de Spark fundaron Databricks.

Apache Storm: Apache Storm es un marco de computación de procesamiento de flujos distribuidos escrito predominantemente 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 caños y pernos que están conectados con agrupaciones de flujos; las topologías definen la lógica que procesa los flujos. Un caño es una fuente de flujos en una topología. Todo el procesamiento en las topologías se realiza en los torrentes. Storm se integra con muchos otros sistemas y bibliotecas, como Kafka, Cassandra, Redis y Kinesis.

Azure Stream Analytics: Azure Stream Analytics es un motor de análisis en tiempo real y de procesamiento de eventos complejos que está diseñado para analizar y procesar grandes volúmenes de datos de flujo rápido procedentes de varias fuentes simultáneamente. Se pueden identificar patrones y relaciones en la información extraída de una serie de fuentes de entrada, como dispositivos, sensores, flujos de clics, fuentes de medios sociales y aplicaciones. Estos patrones pueden utilizarse para desencadenar acciones e iniciar flujos de trabajo como la creación de alertas, la alimentación de información a una herramienta de informes o el almacenamiento de datos transformados para su uso posterior.

Confluent Platform y Confluent Cloud: Confluent Platform es una adaptación comercial de Apache Kafka realizada por los creadores originales de Kafka, que se ofrece en las instalaciones y en la nube. Confluent Cloud fue reconstruido desde cero como un servicio sin servidor, elástico, totalmente gestionado y nativo de la nube. Se ejecuta en AWS, Microsoft Azure y Google Cloud.

Google Cloud Dataflow: Google Cloud Dataflow es un servicio de procesamiento de datos por lotes y flujos totalmente gestionado y sin servidor, basado en Apache Beam. Apache Beam es un SDK unificado, originalmente de Google, para Dataflow, Flink, Spark y Hazelcast Jet.

Ververica: Ververica es una plataforma de procesamiento de flujos para empresas de los creadores originales de Apache Flink. Proporciona multi-tenencia, autenticación, control de acceso basado en roles y auto-escalado para Apache Flink.

Como hemos visto, hay muchas plataformas de datos de streaming en tiempo real entre las que elegir, muchas opciones de análisis en tiempo real y muchas opciones para almacenar y analizar por lotes los datos de streaming. Preste atención a los KPI de los datos en streaming, diseñe su sistema teniendo en cuenta el crecimiento y, por supuesto, realice una prueba de concepto antes de pasar a la producción.