Editar

Compartir a través de


Procesamiento de flujos con motores de datos de código abierto completamente administrados

Azure Event Hubs
Azure Kubernetes Service (AKS)
Azure Cosmos DB
Azure Database for PostgreSQL
Azure Cache for Redis

En este artículo se presenta un ejemplo de una solución de streaming que usa servicios de datos de Azure totalmente administrados.

Architecture

Diagrama de arquitectura que muestra cómo fluyen los datos de streaming a través de un sistema. Los componentes de Kafka, Kubernetes, Cassandra, PostgreSQL y Redis forman el sistema.

Descargue un [archivo de Visio][Versión de Visio del diagrama de arquitectura] de esta arquitectura.

Flujo de trabajo

  1. La característica Event Hubs para Apache Kafka transmite eventos de productores de Kafka.

  2. Apache Spark consume eventos. Azure Kubernetes Service (AKS) proporciona un entorno administrado para los trabajos de Apache Spark.

  3. Una aplicación que usa Azure Cosmos DB for Apache Cassandra escribe eventos en Cassandra. Esta base de datos actúa como plataforma de almacenamiento para eventos. AKS hospeda los microservicios que escriben en Cassandra.

  4. La característica de fuente de cambios de Azure Cosmos DB procesa eventos en tiempo real.

  5. Las aplicaciones programadas ejecutan el procesamiento orientado a lotes en eventos almacenados en Cassandra.

  6. Los almacenes de datos de referencia enriquecen la información de eventos. Las aplicaciones orientadas a lotes escriben la información enriquecida de eventos en PostgreSQL. Los almacenes de datos de referencia típicos incluyen:

    • [Azure Data Lake Storage][Introducción a Azure Data Lake Storage Gen2], que puede almacenar datos en formatos abiertos como [Parquet][Parquet].
    • Almacenes de datos relacionales de código abierto como [PostgreSQL][¿Qué es Azure Database for PostgreSQL?] y [MySQL][¿Qué es Azure Database for MySQL?].
  7. Una aplicación orientada a lotes procesa los datos de Cassandra. Esa aplicación almacena los datos procesados en Azure Database for PostgreSQL. Este almacén de datos relacional proporciona datos a las aplicaciones de nivel inferior que requieren información enriquecida.

  8. Las aplicaciones y herramientas de informes analizan los datos de la base de datos de PostgreSQL. Por ejemplo, [Power BI][¿Qué es Power BI?] se conecta a la base de datos mediante el conector de Azure Database for PostgreSQL. A continuación, este servicio de informes muestra objetos visuales enriquecidos de los datos.

  9. Azure Cache for Redis proporciona una caché en memoria. En esta solución, la caché contiene datos sobre eventos críticos. Una aplicación almacena los datos en la caché y recupera los datos de esta.

  10. Los sitios web y otras aplicaciones usan los datos almacenados en caché para mejorar los tiempos de respuesta. A veces, los datos no están disponibles en la memoria caché. En esos casos, estas aplicaciones usan el [patrón cache-aside][Patrón Cache-Aside] o una estrategia similar para recuperar datos de Cassandra en Azure Cosmos DB.

Componentes

  • Event Hubs es una plataforma de streaming totalmente administrado que puede procesar millones de eventos por segundo. Event Hubs proporciona un [punto de conexión][Uso de Azure Event Hubs desde aplicaciones de Apache Kafka] para Apache Kafka, una plataforma de procesamiento de flujos de código abierto ampliamente utilizada. Cuando las organizaciones usan la característica de punto de conexión, no necesitan compilar ni mantener clústeres de Kafka para el procesamiento de flujos. En su lugar, pueden beneficiarse de la implementación de Kafka totalmente administrada que Event Hubs ofrece.

  • [Azure Cosmos DB][Bienvenido a Azure Cosmos DB] es una base de datos NoSQL y relacional totalmente administrada que ofrece replicación multimaestro. Azure Cosmos DB admite las API de código abierto para muchas bases de datos, lenguajes y plataformas. Algunos ejemplos son:

    • Apache Cassandra.
    • [Gremlin][Gremlin Graph Traversal Machine and Language].
    • [MongoDB][MongoDB].

    A través de [Azure Cosmos DB para Apache Cassandra][Introducción a Azure Cosmos DB para Apache Cassandra], puede acceder a los datos de Azure Cosmos DB mediante herramientas, lenguajes y controladores de Apache Cassandra. Apache Cassandra es una base de datos NoSQL de código abierto adecuada para cargas de trabajo intensivas de escritura.

  • Azure Kubernetes Service (AKS) es un servicio de Kubernetes de alta disponibilidad, seguro y totalmente administrado. [Kubernetes][Kubernetes] es una plataforma de código abierto en constante evolución para administrar cargas de trabajo en contenedor. AKS hospeda motores de procesamiento de macrodatos de código abierto, como Apache Spark. Con AKS, puede ejecutar trabajos de procesamiento de flujos a gran escala en un entorno administrado.

  • Azure Database for PostgreSQL es un servicio de base de datos relacional totalmente administrado. Proporciona [alta disponibilidad, escalado elástico, aplicación de revisiones y otras funcionalidades de administración][¿Qué es Azure Database for PostgreSQL?] para PostgreSQL. [PostgreSQL][PostgreSQL] es un sistema de administración de bases de datos relacionales de código abierto ampliamente adoptado.

  • Azure Cache for Redis proporciona un almacén de datos en memoria basado en el software de Redis. [Redis][Redis] es un popular almacén de datos en memoria de código abierto. Los almacenes de sesiones, las cachés de contenido y otros componentes de almacenamiento usan Redis para mejorar el rendimiento y la escalabilidad. Azure Cache for Redis proporciona funcionalidades de Redis de código abierto como una oferta totalmente administrada.

Alternativas

Puede reemplazar los productos y servicios compatibles con código abierto de esta solución por otros. Para más información sobre los servicios de código abierto disponibles en Azure, consulte [Código abierto en Azure][Código abierto en Azure].

Detalles del escenario

Los servicios de datos de Azure totalmente administrados que ejecutan motores de código abierto constituyen esta solución de streaming:

  • Azure Event Hubs ofrece una implementación de Kafka para la ingesta de flujos.
  • Azure Cosmos DB admite el almacenamiento de eventos en Cassandra.
  • Hosts de AKS [Kubernetes][Kubernetes] microservicios para el procesamiento de flujos.
  • Azure Database for PostgreSQL administra el almacenamiento de datos relacionales en [PostgreSQL][PostgreSQL].
  • Azure Cache for Redis administra [Redis][Redis] almacenes de datos en memoria.

Las tecnologías de código abierto ofrecen muchas ventajas. Por ejemplo, las organizaciones pueden usar tecnologías de código abierto para:

  • Migrar las cargas de trabajo existentes.
  • Acceder a la amplia comunidad de código abierto.
  • Limite el bloqueo del proveedor.

Al hacer que las tecnologías de código abierto sean accesibles, las herramientas y los servicios de Azure ayudan a las organizaciones a aprovechar estas ventajas y a desarrollar las soluciones que elijan.

Esta solución usa [plataforma como servicio (PaaS)][¿Qué es PaaS?] financieros. Como resultado, Microsoft controla la aplicación de revisiones, el mantenimiento del acuerdo de nivel de servicio (SLA) y otras tareas de administración. Otra ventaja es la integración nativa con la infraestructura de seguridad de Azure.

Posibles casos de uso

Esta solución se aplica a varios escenarios:

  • Uso de servicios PaaS de Azure para crear soluciones de streaming modernas que usen tecnologías de código abierto
  • Migración de soluciones de procesamiento de flujos de código abierto a Azure

Consideraciones

Estas consideraciones implementan los pilares del marco de buena arquitectura de Azure, que es un conjunto de principios guía que se pueden usar para mejorar la calidad de una carga de trabajo. Para más información, consulte Marco de buena arquitectura de Microsoft Azure.

Diseñe e implemente cada servicio teniendo en cuenta los procedimientos recomendados. Para obtener instrucciones para cada servicio, consulte el sitio de documentación de Microsoft. Revise también la información de las secciones siguientes:

Rendimiento

  • Implemente [agrupación de conexiones para Azure Database for PostgreSQL][Procedimientos recomendados de rendimiento para usar Azure Database for PostgreSQL: agrupación de conexiones]. Puede usar una biblioteca de agrupaciones de conexiones en la aplicación. O bien, puede usar un agrupador de conexiones como [PgBouncer][PgBouncer] o [Pgpool][Pgpool Wiki]. Establecer una conexión con PostgreSQL es una operación costosa. Con la agrupación de conexiones, puede evitar degradar el rendimiento de la aplicación. PgBouncer es [integrado][PgBouncer en el servidor flexible de Azure Database for PostgreSQL] en el servidor flexible de Azure Database for PostgreSQL.

  • Configure Azure Cosmos DB para Apache Cassandra para obtener el mejor rendimiento mediante el uso de una [estrategia de creación de particiones][Creación de particiones en Azure Cosmos DB para Apache Cassandra]. Decida si desea usar una clave principal de campo único, una clave principal compuesta o una clave de partición compuesta al crear particiones de tablas.

Escalabilidad

  • Tenga en cuenta los requisitos de streaming al elegir un [nivel de Event Hubs][Precios de Event Hubs]:

    • Para los requisitos de rendimiento de rango medio de menos de 120 MBps, tenga en cuenta el [nivel Premium][Información general de Event Hubs Premium (versión preliminar)]. Este nivel se escala elásticamente para satisfacer los requisitos de streaming.
    • Para cargas de trabajo de streaming de gama alta con una entrada de gigabytes de datos, considere la posibilidad de [Nivel dedicado][Introducción a Event Hubs Dedicated]. Este nivel es una oferta de un solo inquilino con una capacidad garantizada. Puede escalar y reducir verticalmente los clústeres dedicados.
  • Considere la posibilidad de [rendimiento aprovisionado de escalabilidad automática][Creación de contenedores y bases de datos de Azure Cosmos con rendimiento de escalabilidad automática] para Azure Cosmos DB si las cargas de trabajo son impredecibles y espiadas. Puede configurar Azure Cosmos DB para usar el rendimiento aprovisionado manualmente o el rendimiento aprovisionado de escalabilidad automática. Con la escalabilidad automática, Azure escala automáticamente y al instante las unidades de solicitud por segundo según su uso.

Seguridad

La seguridad proporciona garantías contra ataques deliberados y el abuso de datos y sistemas valiosos. Para más información, consulte Introducción al pilar de seguridad.

  • Uso de [Azure Private Link][¿Qué es Azure Private Link?] para que los servicios de Azure formen parte de la red virtual. Cuando se usa Private Link, el tráfico entre los servicios y la red fluye a través de la red troncal de Azure sin atravesar la red pública de Internet. Los servicios de Azure de esta solución admiten Private Link para las SKU seleccionadas.

  • Compruebe las directivas de seguridad de su organización. Con Azure Cosmos DB for Apache Cassandra, las claves proporcionan acceso a recursos, como espacios de claves y tablas. La instancia de Azure Cosmos DB almacena esas claves. Es posible que las directivas de seguridad requieran que [propague esas claves a un servicio de administración de claves][Protección de claves de Azure Cosmos mediante Azure Key Vault], como Azure Key Vault. Asegúrese también de [rotar claves][Rotación y regeneración de claves] según las directivas de su organización.

Resistencia

Considere la posibilidad de usar zonas de disponibilidad para proteger las aplicaciones críticas para la empresa frente a errores del centro de datos. Los servicios de esta solución admiten zonas de disponibilidad para las SKU seleccionadas en regiones habilitadas para zona de disponibilidad. Para obtener información actualizada, revise la lista de servicios que admiten zonas de disponibilidad.

Optimización de costos

La optimización de costos trata de buscar formas de reducir los gastos innecesarios y mejorar las eficiencias operativas. Para más información, vea Información general del pilar de optimización de costos.

Para estimar el costo de esta solución, use la Calculadora de precios de Azure. Tenga también en cuenta los siguientes puntos:

  • [Event Hubs][Precios de Event Hubs] está disponible en los niveles Básico, Estándar, Premium y Dedicado. Los niveles Prémium o Dedicado son los mejores para cargas de trabajo de streaming a gran escala. Puede escalar el rendimiento, así que considere la posibilidad de empezar a pequeña escala y luego escalar verticalmente a medida que aumente la demanda.

  • Azure Cosmos DB ofrece dos modelos:

    • Un modelo de rendimiento aprovisionado que es ideal para cargas de trabajo exigentes. Este modelo está disponible en dos opciones de administración de capacidad: estándar y escalabilidad automática.
    • Un modelo sin servidor adecuado para ejecutar cargas de trabajo pequeñas y con picos.
  • Un clúster de AKS consta de un conjunto de nodos o máquinas virtuales (VM) que se ejecutan en Azure. El costo de los componentes de proceso, almacenamiento y red forma parte de los costos principales de un clúster.

  • Azure Database for PostgreSQL está disponible en los niveles Servidor único y Servidor flexible. Los distintos niveles se adaptan a diferentes escenarios, como cargas de trabajo predecibles, ampliables y de alto rendimiento. Los costos dependen principalmente de la elección de los nodos de proceso y la capacidad de almacenamiento. En el caso de las nuevas cargas de trabajo, considere la posibilidad de elegir el nivel servidor flexible, ya que tiene una gama más amplia de [funcionalidades admitidas][Comparación entre servidor único y servidor flexible] en el nivel de servidor único. Tenga en cuenta también que el servidor único está en vías de quedar en desuso.

  • Azure Cache for Redis está disponible en varios niveles. Estos niveles admiten cachés que van desde 250 megabytes a varios terabytes. Además del tamaño, otros requisitos también afectan a la elección del nivel:

    • Agrupación en clústeres
    • Persistencia
    • Replicación geográfica activa

Implementación de este escenario

Tenga en cuenta estos puntos al implementar esta solución:

  • Al implementar Event Hubs para Kafka, consulte [Inicio rápido: Streaming de datos con Event Hubs mediante el protocolo Kafka][Inicio rápido: Streaming de datos con Event Hubs mediante el protocolo Kafka]. Este artículo ofrece la siguiente información:

    • Envío y recepción de mensajes con Kafka en Event Hubs
    • Código de ejemplo para una aplicación de publicación
    • Cómo cambiar las aplicaciones de Kafka existentes a Event Hubs para Kafka mediante la realización de cambios de configuración
  • Con respecto a Apache Spark:

    • Para obtener información sobre cómo crear una aplicación de Spark básica, consulte [Conexión de la aplicación apache Spark con Azure Event Hubs][Conexión de la aplicación apache Spark con Azure Event Hubs].
    • Para hospedar la aplicación spark en AKS, consulte [Ejecución de trabajos de Apache Spark en AKS][Ejecución de trabajos de Apache Spark en AKS].
  • Considere la posibilidad de usar una aplicación de Java para escribir eventos en Cassandra. Para obtener más información, consulte [Inicio rápido: Compilación de una aplicación java para administrar Azure Cosmos DB para datos de Apache Cassandra (v4 Driver)][Inicio rápido: Compilación de una aplicación java para administrar datos de Azure Cosmos DB para Apache Cassandra (v4 Driver)].

  • Al usar la [fuente de cambios de Azure Cosmos DB][Fuente de cambios en Azure Cosmos DB], consulte [Fuente de cambios en Azure Cosmos DB para Apache Cassandra][Fuente de cambios en Azure Cosmos DB para Apache Cassandra] para obtener esta información:

    • Uso de predicados de consulta en [Cassandra Query Language (CQL)][Cassandra Query Language] para consultar la API de fuente de cambios
    • Código de ejemplo para una aplicación Java
  • Para obtener información sobre cómo procesar los eventos almacenados en Cassandra, consulte [Tutorial: Consulta de datos de Azure Cosmos DB para Apache Cassandra][Tutorial: Consulta de datos desde Azure Cosmos DB para Apache Cassandra]. Este artículo también contiene código Java de ejemplo para usar comandos CQL para recuperar datos de tablas.

  • Para obtener información sobre cómo escribir datos en Azure Database for PostgreSQL con una aplicación orientada a lotes, consulte [Inicio rápido: Uso de Java y JDBC con Azure Database for PostgreSQL][Inicio rápido: Uso de Java y JDBC con Azure Database for PostgreSQL]. Este artículo también contiene código Java de ejemplo para almacenar datos.

  • Para obtener información sobre el almacenamiento y la recuperación de datos con Azure Cache for Redis, consulte [Inicio rápido: Uso de Azure Cache for Redis en Java][Inicio rápido: Uso de Azure Cache for Redis en Java]. Este artículo también contiene código Java de ejemplo para acceder a una memoria caché.

Colaboradores

Microsoft está actualizando y manteniendo este artículo. Originalmente lo escribieron los siguientes colaboradores.

Autor principal:

Pasos siguientes

Para conocer las soluciones relacionadas, consulte esta información:

[Patrón Cache-Aside]: .. /.. /patterns/cache-aside.yml The [Cassandra Query Language (CQL)]: https://cassandra.apache.org/doc/latest/cassandra/cql/index.html [Cassandra Query Language]: https://cassandra.apache.org/doc/latest/cassandra/cql/index.html [Change feed in Azure Cosmos DB]: /azure/cosmos-db/change-feed [Change feed in Azure Cosmos DB for Apache Cassandra]: /azure/cosmos-db/cassandra/cassandra-change-feed?tabs=java [Choose an analytical data store in Azure]: .. /.. /data-guide/technology-choices/analytical-data-stores.md [Elegir una tecnología de análisis de datos en Azure]: .. /.. /data-guide/technology-choices/analysis-visualizations-reporting.md [Conexión de la aplicación apache Spark con Azure Event Hubs]: /azure/event-hubs/event-hubs-kafka-spark-tutorial [Creación de contenedores y bases de datos de Azure Cosmos con rendimiento de escalabilidad automática]: /azure/cosmos-db/provision-throughput-autoscale [Data streaming con AKS]: .. /.. /solution-ideas/articles/data-streaming-scenario.yml [Precios de Event Hubs]: https://azure.microsoft.com/pricing/details/event-hubs [Preguntas más frecuentes sobre Azure Cosmos DB para Apache Cassandra]: /azure/cosmos-db/cassandra/cassandra-faq The [Gremlin Graph Traversal Máquina y lenguaje]: [Máquina y lenguaje de recorrido de Gremlin Graph]: https://tinkerpop.apache.org/gremlin.html https://tinkerpop.apache.org/gremlin.html [Introducción a Azure Cosmos DB para Apache Cassandra]: /azure/cosmos-db/cassandra/cassandra-introduction [Introducción a Azure Data Lake Storage Gen2]: /azure/storage/blobs/data-lake-storage-introduction [Rotación y regeneración de claves]: /azure/cosmos-db/secure-access-to-data?tabs=using-primary-key#key-rotation [Kubernetes]: https://kubernetes.io [MongoDB]: [Abrir] https://www.mongodb.com source on Azure]: https://azure.microsoft.com/overview/open-source/ [Overview of Event Hubs Dedicated]: /azure/event-hubs/event-hubs-dedicated-overview [Overview of Event Hubs Premium (Preview)]: /azure/event-hubs/event-hubs-premium-overview [Parquet]: https://parquet.apache.org [Creación de particiones en Azure Cosmos DB para Apache Cassandra]: /azure/cosmos-db/cassandra/cassandra-partitioning [Procedimientos recomendados de rendimiento para usar Azure Database for PostgreSQL: agrupación de conexiones]: [PgBouncer]: https://azure.microsoft.com/blog/performance-best-practices-for-using-azure-database-for-postgresql-connection-pooling https://www.pgbouncer.org [Pgpool Wiki]: https://www.pgpool.net/mediawiki/index.php/Main_Page [PostgreSQL]: [Quick] https://www.postgresql.org start: Compile una aplicación java para administrar Azure Cosmos DB para datos de Apache Cassandra (v4 Driver)]: /azure/cosmos-db/cassandra/manage-data-java-v4-sdk [Inicio rápido: Streaming de datos con Event Hubs mediante el protocolo Kafka]: /azure/event-hubs/event-hubs-quickstart-kafka-enabled-event-hubs [Inicio rápido: Uso de Azure Cache for Redis en Java]: /azure/azure-cache-for-redis/cache-java-get-started [Inicio rápido: Uso de Java y JDBC con Azure Database for PostgreSQL]: /azure/postgresql/flexible-server/connect-java?tabs=passwordless [Redis]: https://redis.io [Ejecución de trabajos de Apache Spark en AKS]: /azure/aks/spark-job [Protección de claves de Azure Cosmos mediante Azure Key Vault]: /azure/cosmos-db/access-secrets-from-keyvault [Tutorial: Consulta de datos from Azure Cosmos DB for Apache Cassandra]: /azure/cosmos-db/cassandra/query-data [Use Azure Event Hubs from Apache Kafka applications]: /azure/event-hubs/event-hubs-for-kafka-ecosystem-overview [Versión de Visio diagrama de arquitectura]: https://arch-center.azureedge.net/US-1874059-open-source-data-engine-stream-processing-architecture.vsdx [Bienvenido a Azure Cosmos DB]: /azure/cosmos-db/introduction [¿Qué es Azure Database for MySQL?]: /azure/mysql/overview [¿Qué es Azure Database for PostgreSQL?]: /azure/postgresql/overview [¿Qué es Azure Private Link?]: /azure/private-link/private-link-overview [What is PaaS?]: https://azure.microsoft.com/overview/what-is-paas/ [What is Power BI?]: /power-bi/fundamentals/power-bi-overview [Comparison between Single Server and Flexible Server]: /azure/postgresql/flexible-server/concepts-compare-single-server-flexible-server#comparison-table [PgBouncer in Azure Database for PostgreSQL Flexible Server]: /azure/postgresql/flexible-server/concepts-pgbouncer