por Martín Heller

Muchas de las mejores plataformas para administrar, almacenar y analizar datos de transmisión son proyectos de código abierto de Apache, junto con implementaciones comerciales y en la nube de esos proyectos.
La transmisión de datos se genera continuamente, a menudo por miles de fuentes de datos, como sensores o registros del servidor. Los registros de datos de transmisión a menudo son pequeños, tal vez unos pocos kilobytes cada uno, pero hay muchos de ellos y, en muchos casos, la transmisión continúa sin detenerse. En este artículo, proporcionaremos algunos antecedentes y discutiremos cómo elegir una plataforma de transmisión de datos.
¿Cómo funcionan las plataformas de transmisión de datos?
Ingestión y exportación de datos. En general, tanto la ingesta de datos como la exportación de datos se manejan a través de conectores de datos que están especializados para los sistemas externos. En algunos casos, existe un proceso ETL (extracción, transformación y carga) o ELT (extracción, carga y transformación) para reordenar, limpiar y acondicionar los datos para su destino.
La ingestión para transmisión de datos a menudo lee datos generados por múltiples fuentes, a veces miles de ellas, como en el caso de los dispositivos IoT (Internet de las cosas). La exportación de datos a veces se realiza a un almacén de datos o a un lago de datos para un análisis profundo y aprendizaje automático.
Pub/sub y temas. Muchas plataformas de transmisión de datos, incluidas Apache Kafka y Apache Pulsar , implementan un modelo de publicación y suscripción, con datos organizados en temas. Los datos ingeridos se pueden etiquetar con uno o más temas, de modo que los clientes suscritos a cualquiera de esos temas puedan 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 Últimas noticias, Noticias de EE. UU. y Política, de modo que el software de diseño de página podría incluirlo en cada una de esas secciones bajo la supervisión de el editor de sección (humano).https://imasdk.googleapis.com/js/core/bridge3.503.0_es.html#goog_4464554781 second of 28 secondsVolumen 0%
Análisis de datos. Las plataformas de transmisión de datos generalmente incluyen la oportunidad de realizar análisis en dos puntos de la tubería. El primero es parte de la transmisión en tiempo real y el segundo está en un punto final persistente. Por ejemplo, Apache Kafka tiene capacidades analíticas simples en tiempo real en su API Streams y también puede llamar a Apache Samza u otro procesador de análisis para cálculos más complejos en tiempo real. Hay 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 por lotes periódico.
Las funciones sin servidor, como AWS Lambda, se pueden usar con flujos de datos para analizar registros de datos de transmisión mediante programas personalizados. Las funciones sin servidor son una alternativa a los procesadores de análisis de flujo como Apache Flink.
Agrupación. Las plataformas de transmisión de datos rara vez son instancias únicas, excepto para instalaciones de desarrollo y prueba. Las plataformas de transmisión de producción deben escalar, por lo que generalmente se ejecutan como grupos de nodos. La última forma de implementar esto para la transmisión de eventos en la nube es en una plataforma elástica sin servidor como Confluent Cloud.
Casos de uso de transmisión
La siguiente lista de casos de uso proviene de la documentación de código abierto de Kafka:
- Para procesar pagos y transacciones financieras en tiempo real, como en bolsas de valores, bancos y seguros.
- Para rastrear y monitorear automóviles, camiones, flotas y envíos en tiempo real, como en logística y la industria automotriz.
- Para capturar y analizar continuamente datos de sensores de dispositivos IoT u otros equipos, como en fábricas y parques eólicos.
- Para recopilar y reaccionar de inmediato a las interacciones y pedidos de los clientes, como en el comercio minorista, la industria hotelera y de viajes, y las aplicaciones móviles.
- Monitorear a los pacientes en atención hospitalaria y predecir cambios de condición para asegurar un tratamiento oportuno en emergencias.
- Para conectar, almacenar y poner a disposición datos producidos por diferentes divisiones de una empresa.
- Servir como base para plataformas de datos, arquitecturas basadas en eventos y microservicios.
Kafka también enumera casos de uso de clientes con nombre , por ejemplo: The New York Times usa Apache Kafka y la API de Kafka Streams para almacenar y distribuir, en tiempo real, contenido publicado a las diversas aplicaciones y sistemas que lo ponen a disposición de los lectores.
Criterios para elegir una plataforma de transmisión de datos
Los indicadores clave de rendimiento (KPI) para las plataformas de transmisión de datos son la tasa de eventos, el rendimiento (la tasa de eventos multiplicada por el tamaño del evento), la latencia, la confiabilidad y la cantidad de temas (para arquitecturas pub-sub). El escalado se puede lograr agregando nodos en una geometría agrupada, lo que también aumenta la confiabilidad. El escalado es automático en plataformas sin servidor. No todas las plataformas de transmisión de datos necesariamente cumplirán con todos sus KPI.
El soporte del lenguaje de programación del cliente puede ser un diferenciador entre las plataformas de transmisión de datos, ya que sus propios desarrolladores o consultores escribirán aplicaciones cliente. Por ejemplo, Apache Kafka de código abierto ofrece oficialmente la opción de llamar a la API Streams desde Java o Scala (ambos lenguajes JVM), pero hay un proyecto comunitario llamado librdkafka que admite otros lenguajes para clientes, incluidos C/C++, Go, .NET y Python. Confluent mantiene su propio conjunto oficial de binarios firmados para librdkafka .
Por el contrario, Apache Storm fue diseñado desde cero para poder usarse con cualquier lenguaje de programación, a través del compilador de lenguajes cruzados Apache Thrift. Apache Pulsar admite clientes en Java, Go, Python, C++, Node.js, WebSocket y C#. La API de Amazon Kinesis Streams es compatible con todos los idiomas que tienen un SDK o CDK de Amazon: Java, JavaScript, .NET, PHP, Python, Ruby, Go, C++ y Swift.
El soporte de conexión puede ser otro diferenciador. Idealmente, los conectores para todas sus fuentes de datos ya deberían estar disponibles y probados. Por ejemplo, Confluent enumera más de 120 conectores disponibles para Kafka, algunos solo fuente (p. ej., Splunk), algunos solo receptor (p. ej., Snowflake) y otros tanto receptor como fuente (p. ej., Microsoft SQL Server). La lista de Confluent incluye conectores desarrollados por la comunidad. Si necesita escribir sus propios conectores Kafka en Java, puede usar la API de Kafka Connect .
Debe tener en cuenta las ubicaciones de sus fuentes y sumideros de datos al decidir dónde alojar su plataforma de transmisión de datos. En general, desea minimizar la latencia de la transmisión, lo que implica mantener los componentes cerca uno del otro. Por otro lado, algunas de las plataformas de transmisión de datos admiten clústeres distribuidos geográficamente, lo que puede reducir la latencia de fuentes y sumideros remotos.
También debe tener en cuenta la capacidad de gestión de las plataformas de transmisión de datos candidatas. Algunas plataformas tienen la reputación de ser difíciles de configurar y mantener a menos que tenga experiencia en ejecutarlas. Otros, en particular los servidores en la nube con soporte comercial, tienen la reputación de ser muy fáciles de administrar.
Plataformas y servicios clave de transmisión de datos
Amazon Kinesis
Amazon Kinesis le permite recopilar, procesar y analizar datos de transmisión 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 de 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 almacenes de datos de AWS para realizar análisis casi en tiempo real con las herramientas de inteligencia empresarial existentes. Puede usar las funciones sin servidor de AWS Lambda en lugar de Kinesis Data Analytics si desea procesar la transmisión con un programa en lugar de usar SQL o Flink.
Apache Flink
Apache Flink es un marco 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 comunes y realizar cálculos a la velocidad de la memoria y en cualquier escala. Flink se integra con administradores 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
Apache Kafka es una plataforma de transmisión de eventos distribuidos Java/Scala de código abierto para canalizaciones de datos de alto rendimiento, análisis de transmisión, 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 del mercado de transmisión de eventos, incluida la versión comercial de Confluent.
Kafka tiene cinco API principales:
- La API de administración para administrar e inspeccionar temas, intermediarios y otros objetos de Kafka.
- La API Producer para publicar (escribir) un flujo de eventos en uno o más temas de Kafka.
- La API de consumidor para suscribirse a (leer) uno o más temas y procesar el flujo de eventos producidos para ellos.
- La API de Kafka Streams para implementar microservicios y aplicaciones de procesamiento de flujo. Proporciona funciones de nivel superior para procesar flujos de eventos, incluidas transformaciones, operaciones con estado como agregaciones y uniones, creación de ventanas, procesamiento basado en la hora del evento y más. La entrada se lee de uno o más temas para generar una salida a uno o más temas, transformando efectivamente los flujos de entrada en flujos de salida.
- La API de Kafka Connect 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 externos para que puedan integrarse con Kafka. Por ejemplo, un conector a una base de datos relacional como PostgreSQL podría capturar todos 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
Apache Pulsar es una plataforma de streaming y mensajería pub-sub distribuida de Java/C++/Python nativa de la nube y de código abierto. Pulsar fue desarrollado originalmente en Yahoo. Las características de Pulsar incluyen:
- Compatibilidad nativa con varios clústeres en una instancia de Pulsar, con replicación geográfica perfecta de los mensajes en los clústeres.
- Publicación muy baja y latencia de extremo a extremo.
- Escalabilidad perfecta a más de un millón de temas.
- Una API de cliente simple con enlaces para Java , Go , Python y C++ .
- Múltiples modos de suscripción ( exclusivo , compartido y conmutación por error ) para temas.
- Entrega de mensajes garantizada con almacenamiento persistente de mensajes proporcionado por Apache BookKeeper .
- Un marco informático ligero y sin servidor, Pulsar Functions , para el procesamiento de datos nativos de flujo.
- Un marco de conector sin servidor, Pulsar IO , que se basa en Pulsar Functions, que facilita el movimiento de datos dentro y fuera de Apache Pulsar.
- Almacenamiento en niveles que descarga datos del almacenamiento caliente/tibio al almacenamiento frío/a largo plazo (como Amazon S3 y Google Cloud Storage) cuando los datos caducan.
Apache Samza
Apache Samza es un marco de procesamiento de flujo Scala/Java de código abierto 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, incluido Apache Kafka. Las características de Samza incluyen:
- API unificada: una API simple para describir la lógica de la aplicación de una manera independiente de la fuente de datos. La misma API puede procesar datos por lotes y de transmisión.
- Capacidad de conexión en todos los niveles: procese y transforme datos de cualquier fuente. Samza ofrece integraciones integradas 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 una biblioteca integrada: integre con sus aplicaciones existentes y elimine la necesidad de activar y operar un clúster separado para el procesamiento de flujo. Samza se puede utilizar como una biblioteca de cliente ligera integrada en aplicaciones Java/Scala.
- Escriba una vez, ejecute en cualquier lugar: opciones de implementación flexibles para ejecutar aplicaciones en cualquier lugar, desde nubes públicas hasta entornos en contenedores y hardware básico.
- Samza como un servicio administrado: Ejecute el procesamiento de transmisiones como un servicio administrado mediante la integración con los administradores de clústeres populares, incluido 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 host y los puntos de control incrementales para permitir una recuperación rápida de fallas.
- Escala masiva: probado en batalla en aplicaciones que usan varios terabytes de estado y se ejecutan en miles de núcleos. Samza impulsa a varias grandes empresas, incluidas 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 clústeres o máquinas de un solo nodo. Maneja tanto datos por lotes como datos de transmisión en tiempo real. Spark se originó en UC Berkeley, y los autores de Spark fundaron Databricks.
Apache Storm
Apache Storm es un marco de computación de procesamiento de flujo distribuido 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 picos y pernos que están conectados con agrupaciones de flujo; 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 topologías se realiza en pernos . Storm se integra con muchos otros sistemas y bibliotecas, incluidos Kafka, Cassandra, Redis y Kinesis.
Azure Stream Analytics
Azure Stream Analytics es el servicio recomendado para el análisis de flujos en Azure. Está destinado para una amplia gama de escenarios que incluyen, pero no se limitan a:
- Paneles de visualización de datos
- Alertas en tiempo real de patrones espaciales y temporales o anomalías
- Extraer, transformar y cargar (ETL)
- Patrón Event Sourcing
- IoT Edge
Agregar un trabajo de Azure Stream Analytics a la aplicación es la manera más rápida de obtener análisis de flujos en funcionamiento en Azure mediante el lenguaje SQL que ya conoce. Azure Stream Analytics es un servicio de trabajo, por lo que no tiene que perder el tiempo administrando clústeres, ni preocuparse por el tiempo de inactividad, con un SLA del 99,9% en el nivel de trabajo. La facturación también se realiza en el nivel de trabajo, lo que hace que los costos iniciales sean bajos (una unidad de streaming), pero escalables (hasta 192 unidades de streaming). Es mucho más rentable ejecutar algunos trabajos de Stream Analytics que ejecutar y mantener un clúster.
Azure Stream Analytics ofrece una experiencia muy completa de fábrica. Puede aprovechar inmediatamente las siguientes características sin ninguna configuración adicional:
- Operadores temporales integrados, como agregados en ventanas, combinaciones temporales y funciones analíticas temporales.
- Adaptadores de entrada y salida nativos de Azure
- Compatibilidad con datos de referencia de variación lenta (también conocidos como tablas de búsqueda), incluida la unión con datos de referencia geoespaciales de geovalla.
- Soluciones integradas, como la detección de anomalías
- Varias ventanas de tiempo en la misma consulta
- Capacidad de crear varios operadores temporales en secuencias arbitrarias.
- Latencia de un extremo a otro por debajo de 100 ms de la entrada que llega a Event Hubs, incluido el retraso de red desde y hacia Event Hubs, con alto rendimiento sostenido
Fuente: https://www.infoworld.com/article/3648058/how-to-choose-a-streaming-data-platform.html