Realiza transmisiones con Pub/Sub

En esta página, se proporciona un resumen conceptual de la integración entre Dataflow y Pub/Sub. En este resumen, se especifican algunas optimizaciones disponibles en la implementación del ejecutor de Dataflow del conector de E/S de Pub/Sub. Pub/Sub es un sistema de transferencia y entrega de eventos escalable y duradero. Dataflow complementa el modelo de entrega escalable de tipo “al menos una vez” de Pub/Sub con la anulación de mensajes duplicados y el procesamiento “en orden” y de tipo “exactamente una vez” si usas ventanas y almacenamiento en búfer. Para usar Dataflow, escribe la canalización con el SDK de Apache Beam y, luego, ejecuta el código de canalización en el servicio de Dataflow.

Antes de comenzar, obtén más información sobre los conceptos básicos de Apache Beam y las canalizaciones de transmisión. Lee los siguientes recursos para obtener más información:

Compila canalizaciones de transmisión con Pub/Sub

Para obtener los beneficios de la integración de Dataflow con Pub/Sub, puedes compilar tus canalizaciones de transmisión de cualquiera de las siguientes maneras:

Funciones de integración de Pub/Sub y Dataflow

Apache Beam proporciona una implementación de fuente de E/S de referencia (PubsubIO) para Pub/Sub (Java y Python), que utilizan ejecutores que no son de Dataflow (como los ejecutores de Apache Spark y Apache Flink, y el ejecutor directo).

Sin embargo, el ejecutor de Dataflow usa una implementación de PubsubIO que es distinta y privada, Además, aprovecha las API y los servicios internos de Google Cloud para ofrecer tres ventajas principales: marcas de agua de baja latencia, alta precisión de marcas de agua (y, por lo tanto, integridad de datos) y anulación de duplicación eficiente.

La implementación de PubsubIO del ejecutor de Dataflow reconoce de forma automática los mensajes una vez que se escriben en el almacenamiento continuo, ya sea de tipo Shuffle o un receptor. Por lo tanto, se confirma la recepción de los mensajes solo cuando Dataflow puede garantizar que no habrá pérdida de datos si falla algún componente o se pierde una conexión.

Marcas de agua de baja latencia

Dataflow tiene acceso a la API privada de Pub/Sub que proporciona la antigüedad del mensaje no confirmado más antiguo de una suscripción, con una latencia menor que la disponible en Cloud Monitoring. A modo de comparación, las métricas de trabajos pendientes de Pub/Sub que están disponibles en Cloud Monitoring suelen retrasarse entre dos y tres minutos, mientras que, en Dataflow, la demora es de alrededor de diez segundos. Esto permite que Dataflow potencie las marcas de agua de la canalización y emita resultados de procesamiento en ventanas más rápido.

Alta precisión de marcas de agua

Otro problema considerable que se resuelve de manera nativa mediante la integración entre Dataflow y Pub/Sub es la necesidad de una marca de agua sólida para las ventanas que se definen en la hora del evento. La hora del evento es una marca de tiempo que especifica la aplicación del publicador como un atributo de un mensaje de Pub/Sub, en lugar del campo publish_time configurado en un mensaje por el servicio de Pub/Sub. Debido a que Pub/Sub calcula las estadísticas de las tareas pendientes solo con respecto a las marcas de tiempo asignadas por el servicio (o el tiempo de procesamiento), la estimación de la marca de agua de la hora del evento requiere un mecanismo independiente.

Para resolver este problema, si el usuario decide usar marcas de tiempo de eventos personalizados, el servicio de Dataflow crea una segunda suscripción de seguimiento. Esta suscripción de seguimiento se usa para inspeccionar los tiempos de los eventos de los mensajes de la lista de tareas pendientes de la suscripción base y calcular las tareas pendientes de tiempo del evento. Consulta la página de Stack Overflow que trata sobre cómo calcula Dataflow las marcas de agua de Pub/Sub para obtener más información.

Anulación de duplicación eficaz

La anulación de duplicación de mensajes es necesaria para el procesamiento de mensajes del tipo “exactamente una vez”. Dataflow anula los mensajes duplicados con respecto al ID de mensaje de Pub/Sub. Como resultado, toda la lógica de procesamiento puede dar por hecho que los mensajes ya son únicos según el ID de mensaje de Pub/Sub. En la API de PubsubIO, se abstrae el mecanismo de agregación incremental y eficiente que permite lograr esta anulación de duplicación.

Si PubsubIO está configurado para usar ID de mensajes personalizados, Dataflow anula los mensajes duplicados mediante una lista de todos los ID personalizados que detectó en los últimos 10 minutos. Si el ID de un mensaje nuevo está en esta lista, se supone que el mensaje es un duplicado y se descarta.