Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La salida de Azure Cosmos DB en Azure Stream Analytics escribe los resultados del procesamiento de flujos como documentos JSON en un contenedor de Azure Cosmos DB. Soporta el archivo de datos y consultas de baja latencia sobre datos JSON no estructurados. Entender cómo se comporta esta salida te ayuda a configurarla para el rendimiento, la consistencia y la partición que requiere tu escenario.
Aspectos básicos de Azure Cosmos DB como destino de salida
La salida de Azure Cosmos DB en Stream Analytics escribe los resultados de tu procesamiento de flujos como salida JSON en tus contenedores de Azure Cosmos DB. Si no está familiarizado con Azure Cosmos DB, consulte la documentación de Azure Cosmos DB para comenzar.
Stream Analytics se conecta únicamente a Azure Cosmos DB a través de la API SQL. Otras APIs de Azure Cosmos DB aún no están soportadas. Si apunta Stream Analytics a las cuentas de Azure Cosmos DB creadas con otras API, puede que los datos no se almacenen correctamente. Cuando uses Azure Cosmos DB como salida, configura tu trabajo en nivel de compatibilidad 1.2.
Stream Analytics no crea contenedores en la base de datos. En su lugar, debe crearlos por adelantado. A continuación, puede controlar los costos de facturación de los contenedores de Azure Cosmos DB. También puede ajustar el rendimiento, la coherencia y la capacidad de los contenedores directamente mediante las API de Azure Cosmos DB. En las secciones siguientes se detallan algunas de las opciones de contenedores de Azure Cosmos DB.
Ajuste de la coherencia, la disponibilidad y la latencia
Para ajustarse a los requisitos de tu aplicación, ajusta la base de datos y los contenedores en Azure Cosmos DB y haz compensaciones entre consistencia, disponibilidad, latencia y rendimiento.
Dependiendo de los niveles de consistencia de lectura que necesite tu escenario frente a la latencia de lectura y escritura, elige un nivel de consistencia en tu cuenta de base de datos. Para mejorar el rendimiento, aumenta las Unidades de solicitud (RU) del contenedor. También de forma predeterminada, Azure Cosmos DB permite la indexación sincrónica en cada operación CRUD del contenedor. Esta opción es otra forma útil de controlar el rendimiento de lectura y escritura en Azure Cosmos DB. Para obtener más información, revise el artículo sobre el cambio de los niveles de coherencia de bases de datos y consultas.
Upserts de Stream Analytics
Al utilizar la integración de Stream Analytics con Azure Cosmos DB, puedes insertar o actualizar registros en tu contenedor según una columna determinada de ID de documento. Esta operación también se denomina upsert. Stream Analytics usa un enfoque de upsert optimista. Las actualizaciones solo tienen lugar cuando se produce un error de inserción con un conflicto de id. de documento.
Al usar el nivel de compatibilidad 1.0, Stream Analytics realiza esta actualización como una operación PATCH, por lo que soporta actualizaciones parciales del documento. Stream Analytics agrega nuevas propiedades o reemplaza una propiedad existente de forma incremental. No obstante, los cambios en los valores de las propiedades de la matriz en el documento JSON provocan que toda la matriz se sobrescriba. Es decir, la matriz no se combina.
Al usar el nivel de compatibilidad 1.2, el comportamiento del upsert cambia para insertar o reemplazar el documento. En la sección posterior sobre el nivel de compatibilidad 1.2 se describe con más detalle este comportamiento.
Si el documento JSON entrante tiene un campo ID existente, Azure Cosmos DB usa automáticamente ese campo como la columna ID del documento. Stream Analytics gestiona cualquier escritura posterior de esta manera, lo que lleva a una de estas situaciones:
- Los identificadores únicos provocan una operación de inserción.
- Los identificadores duplicados y el Identificador de documento establecido en Id. provocan una operación upsert.
- Los identificadores duplicados y el Identificador de documento no establecido provocan un error después del primer documento
Si quiere guardar todos los documentos, incluidos los que tienen un identificador duplicado, cambie el nombre del campo Id. en la consulta (mediante la palabra clave AS). Permita que Azure Cosmos DB cree el campo Id. o reemplace el identificador por el valor de otra columna (mediante la palabra clave AS o la opción Id. de documento ).
Creación de particiones en Azure Cosmos DB
Azure Cosmos DB escala automáticamente las particiones según la carga de trabajo. Usa contenedores ilimitados para particionar tus datos. Al escribir en contenedores ilimitados, Stream Analytics usa tantos escritores paralelos como el esquema de partición de entrada o el paso de consulta anterior.
Nota:
Azure Stream Analytics solo admite contenedores ilimitados con claves de partición en el nivel superior. Por ejemplo, se admite /region. Las claves de partición anidadas (por ejemplo, /region/name) no están soportadas.
Según la clave de partición que elija, es posible que reciba esta advertencia:
CosmosDB Output contains multiple rows and just one row per partition key. If the output latency is higher than expected, consider choosing a partition key that contains at least several hundred records per partition key.
Elige una propiedad de clave de partición que tenga muchos valores distintos y distribuya tu carga de trabajo de forma uniforme entre esos valores. Como artefacto natural de la partición, el rendimiento máximo de una sola partición limita las solicitudes que involucran la misma clave de partición.
El tamaño de almacenamiento para los documentos que pertenecen al mismo valor de clave de partición está limitado a 20 GB (el límite del tamaño de la partición física es de 50 GB). Una clave de partición ideal es aquella que aparece frecuentemente como filtro en tus consultas y tiene suficiente cardinalidad para garantizar que tu solución sea escalable.
No es necesario que las claves de partición empleadas para las consultas de Stream Analytics y Azure Cosmos DB sean idénticas. Para topologías completamente paralelas, usa la clave de partición de entrada, PartitionId, como clave de partición de la consulta de Stream Analytics, pero esa opción puede no ser la recomendada para la clave de partición de un contenedor de Azure Cosmos DB.
Una clave de partición es también el límite para las transacciones de los procedimientos almacenados y desencadenadores de Azure Cosmos DB. Elige la clave de partición para que los documentos que ocurren juntos en transacciones compartan el mismo valor de clave de partición. El artículo Creación de particiones en Azure Cosmos DB proporciona más detalles acerca de cómo elegir una clave de partición.
Para contenedores fijos de Azure Cosmos DB, Stream Analytics no ofrece forma de escalar o desescalar una vez que estén llenos. Tienen un límite de 10 GB y un rendimiento de 10 000 RU/s. Para migrar los datos de un contenedor fijo a un contenedor ilimitado (por ejemplo, uno con al menos 1000 RU/s y una clave de partición), use la herramienta de migración de datos o la biblioteca de fuente de cambios.
La capacidad de escribir en varios contenedores fijos se está dejando en desuso. No lo uses para escalar tu trabajo de Stream Analytics.
Rendimiento mejorado con el nivel de compatibilidad 1.2
Al usar el nivel de compatibilidad 1.2, Stream Analytics permite la integración nativa para la escritura masiva en Azure Cosmos DB. Mediante esta integración, Stream Analytics escribe de forma eficaz en Azure Cosmos DB, maximizando el rendimiento y gestionando eficientemente las solicitudes sujetas a limitación.
El mecanismo de escritura mejorado está disponible en un nuevo nivel de compatibilidad, debido a una diferencia en el comportamiento de upsert. Al usar niveles anteriores a la 1.2, el comportamiento del upsert es insertar o fusionar el documento. Al usar la versión 1.2, el comportamiento del upsert cambia para insertar o reemplazar el documento.
Al usar versiones anteriores a la 1.2, Stream Analytics utiliza un procedimiento almacenado personalizado para insertar o actualizar documentos de forma masiva por clave de partición en Azure Cosmos DB. En ese caso, Stream Analytics escribe un lote como una transacción. Incluso cuando un solo registro genera un error transitorio (limitación de velocidad), Stream Analytics tiene que volver a intentar todo el lote. Este comportamiento hace que los escenarios con incluso un limitamiento razonable sean lentos.
El siguiente ejemplo muestra dos trabajos de Stream Analytics idénticos que leen la misma entrada de Azure Event Hubs. Ambos trabajos de Stream Analytics están completamente particionados con una consulta de paso y escriben en contenedores de Azure Cosmos DB idénticos. Las métricas de la izquierda corresponden al trabajo configurado con el nivel de compatibilidad 1.0. Las métricas de la derecha son del trabajo configurado con la versión 1.2. La clave de partición de un contenedor de Azure Cosmos DB es un GUID único que procede del evento de entrada.
La tasa de eventos entrantes en Azure Event Hubs es dos veces mayor que la que los contenedores de Azure Cosmos DB (20.000 RU) están configurados para ingerir, por lo que puedes esperar limitación de velocidad en Azure Cosmos DB. Sin embargo, el trabajo con el nivel 1.2 escribe de forma constante con un mayor rendimiento (eventos de salida por minuto) y con un menor porcentaje medio de utilización de SU. En tu entorno, esta diferencia depende de algunos factores más. Estos factores incluyen la elección del formato del evento, el tamaño de los mensajes y eventos de entrada, las claves de partición y la consulta.
Con la versión 1.2, Stream Analytics aprovecha de forma más inteligente el 100 % del rendimiento disponible en Azure Cosmos DB, con pocos reintentos debido a la regulación o a la limitación de la tasa. Este comportamiento proporciona una mejor experiencia para otras cargas de trabajo, como las consultas que se ejecutan en el contenedor al mismo tiempo. Si desea ver cómo Stream Analytics realiza el escalado horizontal con Azure Cosmos DB como un receptor de 1000 a 10 000 mensajes por segundo, pruebe este proyecto de ejemplo de Azure.
El rendimiento de la salida de Azure Cosmos DB es idéntico usando 1.0 y 1.1. Se recomienda encarecidamente que use el nivel de compatibilidad 1.2 en Stream Analytics con Azure Cosmos DB.
Configuración de Azure Cosmos DB para la salida JSON
Cuando configuras Azure Cosmos DB como salida en Stream Analytics, las siguientes propiedades definen la salida.
| Campo | Descripción |
|---|---|
| Alias de salida | Alias para hacer referencia a esta salida en la consulta de Stream Analytics. |
| Suscripción | Suscripción a Azure. |
| Identificador de cuenta | El nombre o el URI del punto de conexión de la cuenta de Azure Cosmos DB. |
| Clave de cuenta | La clave de acceso compartido para la cuenta de Azure Cosmos DB. |
| Base de datos | El nombre de la base de datos de Azure Cosmos DB. |
| Nombre del contenedor | Nombre del contenedor, como MyContainer. Debe existir un contenedor denominado MyContainer. |
| Id. de documento | Opcional. El nombre de la columna en los eventos de salida que sirve como clave única para las operaciones de inserción o actualización. Si lo dejas vacío, Stream Analytics inserta todos los eventos sin opción de actualización. |
Una vez configurada la salida de Azure Cosmos DB, puede usarla en la consulta como destino de una instrucción INTO. Cuando usas una salida de Azure Cosmos DB de esa manera, debes establecer explícitamente una clave de partición.
El registro de salida debe contener una columna con distinción de mayúsculas y minúsculas con un nombre asignado después de la clave de partición en Azure Cosmos DB. Para lograr una mayor paralelización, la instrucción puede requerir la cláusula PARTITION BY que utilice la misma columna.
Esta es una consulta de ejemplo:
SELECT TollBoothId, PartitionId
INTO CosmosDBOutput
FROM Input1 PARTITION BY PartitionId
Control de errores y reintentos
En caso de un error transitorio, indisponibilidad del servicio o limitación al enviar eventos a Azure Cosmos DB, Stream Analytics reintenta de forma indefinida completar correctamente la operación. Pero no realiza reintentos en caso de errores Unauthorized (código de error HTTP 401), NotFound (código de error HTTP 404), Forbidden (código de error HTTP 403) o BadRequest (código de error HTTP 400).
Problemas comunes que hacen que la salida de Azure Cosmos DB falle
Varias condiciones pueden causar que la salida de Azure Cosmos DB falle. Los datos de salida de Stream Analytics pueden violar una restricción única de índice en el contenedor, la PartitionKey columna puede no existir o la Id columna puede no existir. Para más información sobre restricciones de índices únicos, consulte Restricciones de clave únicas en Azure Cosmos DB.
Contenido relacionado
- Comprender los resultados de Azure Stream Analytics
- Salida de resultados de Azure Stream Analytics a la base de datos de Azure SQL
- Particionamiento de la salida de blobs personalizada en Azure Stream Analytics