Usa instantáneas de Dataflow

Las instantáneas de Dataflow guardan el estado de una canalización de transmisión, lo que te permite iniciar una versión nueva de tu trabajo de Dataflow sin perder el estado. Las instantáneas son útiles para realizar copias de seguridad y recuperación, probar y revertir actualizaciones a canalizaciones de transmisión y otras situaciones similares.

Puedes crear una instantánea de Dataflow de cualquier trabajo de transmisión en ejecución. Ten en cuenta que cualquier trabajo nuevo que crees a partir de una instantánea usará Streaming Engine. También puedes usar una instantánea de Dataflow para migrar la canalización existente a Streaming Engine, que es más eficiente y escalable y tiene un tiempo de inactividad mínimo.

En esta guía, se explica cómo crear y administrar instantáneas y, también, crear trabajos a partir de instantáneas.

Antes de comenzar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs.

    Enable the APIs

Crea una instantánea

Console

  1. En la consola de Google Cloud, ve a la página Trabajos de Dataflow.

    Ir a Trabajos

    Aparecerá una lista de trabajos de Dataflow junto con su estado. Si no ves ningún trabajo de transmisión, deberás ejecutar un trabajo de transmisión nuevo. Si deseas ver un ejemplo de un trabajo de transmisión, consulta la Guía de inicio rápido sobre cómo usar plantillas.

  2. Selecciona un trabajo.
  3. En la barra de menú de la página Detalles del trabajo, haz clic en Crear instantánea.
  4. En el cuadro de diálogo Crear una instantánea, selecciona una de las siguientes opciones:
    • Sin fuentes de datos: selecciona esta opción para crear una instantánea solo del estado de tu trabajo de Dataflow.
    • Con fuentes de datos: selecciona esta opción para crear una instantánea del estado del trabajo de Dataflow junto con una instantánea de tu fuente de Pub/Sub.
  5. Haz clic en Crear.

gcloud

Crear una instantánea:

gcloud dataflow snapshots create \
    --job-id=JOB_ID \
    --snapshot-ttl=DURATION \
    --snapshot-sources=true \
    --region=REGION

Reemplaza lo siguiente:

  • JOB_ID: Es el ID del trabajo de transmisión.
  • DURATION: Es la cantidad de tiempo (en días) antes de que la instantánea venza, después de lo cual no se podrán crear más trabajos a partir de la instantánea. La marca snapshot-ttl es opcional, por lo que, si no se especifica, la instantánea vence en 7 días. Especifica el valor en el siguiente formato: 5d. La duración máxima que puedes especificar es de 30 días (30d).
  • REGION: Es la región en la que se ejecuta tu trabajo de transmisión

La marca snapshot-sources especifica si se deben tomar instantáneas de las fuentes de Pub/Sub junto con la instantánea de Dataflow. Si es true, se toman instantáneas de manera automática de las fuentes de Pub/Sub y los ID de la instantánea de Pub/Sub se muestran en la respuesta de salida. Después de ejecutar el comando create, verifica el estado de la instantánea mediante la ejecución del comando list o describe.

Cuando se crean instantáneas de Dataflow, sucede lo siguiente:

  • Las instantáneas de Dataflow generan cargos por el uso del disco.
  • Las instantáneas se crean en la misma región que el trabajo.
  • Si la ubicación del trabajador del trabajo es diferente de la región del trabajo, la creación de la instantánea fallará. Consulta la guía de regiones de Dataflow.
  • Solo puedes tomar instantáneas de trabajos que no sean de Streaming Engine si se iniciaron o actualizaron después del 1 de febrero de 2021.
  • Las instantáneas de Pub/Sub que se crean con instantáneas de Dataflow son administradas por el servicio de Pub/Sub y generan un cargo.
  • Una instantánea de Pub/Sub vence no más de 7 días desde el momento de su creación. Su ciclo de vida exacto se determina en el momento de la creación según las tareas pendientes existente en la suscripción de origen. En particular, el ciclo de vida de la instantánea de Pub/Sub es 7 days - (age of oldest unacked message in the subscription). Por ejemplo, considera una suscripción cuyo mensaje no confirmado más antiguo tiene 3 días de antigüedad. Si se crea una instantánea de Pub/Sub a partir de esta suscripción, la instantánea, que siempre captura estas tareas pendientes de hace 3 días mientras la instantánea exista, vencerá en 4 días. Consulta la referencia de las instantáneas de Pub/Sub.
  • Durante la operación de la instantánea, tu trabajo de Dataflow se detiene y se reanuda una vez que la instantánea está lista. El tiempo necesario depende del tamaño del estado de la canalización. Por ejemplo, el tiempo necesario para tomar instantáneas en trabajos de Streaming Engine es, por lo general, más corto que los trabajos que no son de Streaming Engine.
  • Puedes cancelar el trabajo mientras una instantánea se encuentra en curso, lo que luego cancela la instantánea.
  • No puedes actualizar o desviar el trabajo mientras una instantánea se encuentra en curso. Debes esperar hasta que el trabajo se haya reanudado desde el proceso de instantánea antes de poder actualizarlo o desviarlo.

Usa la página de instantáneas

Después de crear una instantánea, puedes usar la página Instantáneas en la consola de Google Cloud para ver y administrar las instantáneas del proyecto.

Si haces clic en una instantánea, se abrirá la página Detalles de la instantánea (Snapshot details). Puedes obtener metadatos adicionales sobre la instantánea, así como un vínculo al trabajo de origen y cualquier instantánea de Pub/Sub.

Página de detalles de instantáneas de Dataflow en la que puedes obtener más información sobre una instantánea.

Borra una instantánea

Borrar una instantánea es una forma de detener el proceso de las instantáneas y reanudar el trabajo. Además, si borras instantáneas de Dataflow, no se borrarán de forma automática las instantáneas de Pub/Sub asociadas.

Console

  1. En la consola de Google Cloud, ve a la página Instantáneas de Dataflow.

    Ir a Instantáneas

  2. Selecciona la instantánea y haz clic en Borrar.
  3. En el cuadro de diálogo Borrar instantánea, haz clic en Borrar para confirmar.

gcloud

Borra una instantánea:

gcloud dataflow snapshots delete SNAPSHOT_ID \
    --region=REGION

Reemplaza lo siguiente:

  • SNAPSHOT_ID: Es el ID de la instantánea.
  • REGION: Es la región en la que existe la instantánea.

Para obtener más información, consulta la referencia del comando delete.

Crea un trabajo a partir de una instantánea

Después de crear una instantánea, puedes restablecer el estado del trabajo de Dataflow si creas un trabajo nuevo a partir de esa instantánea.

Java

Para crear un trabajo nuevo a partir de una instantánea, usa las marcas --createFromSnapshot y --enableStreamingEngine.

  • En la shell o terminal, crea un trabajo nuevo a partir de una instantánea. Por ejemplo:
    mvn -Pdataflow-runner compile exec:java \
        -Dexec.mainClass=MAIN_CLASS \
        -Dexec.args="--project=PROJECT_ID \
        --stagingLocation=gs://STORAGE_BUCKET/staging/ \
        --inputFile=gs://apache-beam-samples/shakespeare/* \
        --output=gs://STORAGE_BUCKET/output \
        --runner=DataflowRunner \
        --enableStreamingEngine \
        --createFromSnapshot=SNAPSHOT_ID \
        --region=REGION"

    Reemplaza lo siguiente:

    • MAIN_CLASS o MODULE: Para las canalizaciones de Java, es la ubicación de la clase principal que contiene tu código de canalización. Para las canalizaciones de Python, es la ubicación del módulo que contiene el código de tu canalización. Por ejemplo, cuando se usa el ejemplo de WordCount, el valor es org.apache.beam.examples.WordCount.
    • PROJECT_ID: El ID del proyecto de Google Cloud.
    • STORAGE_BUCKET: Es el bucket de Cloud Storage que usas para los elementos de trabajo temporales y el resultado final.
    • SNAPSHOT_ID: Es el ID de la instantánea a partir de la que deseas crear un trabajo nuevo.
    • REGION: Es la ubicación en la que deseas ejecutar el nuevo trabajo de Dataflow.

Python

Las instantáneas de Dataflow requieren el SDK de Apache Beam para Python, versión 2.29.0 o posterior.

Para crear un trabajo nuevo a partir de una instantánea, usa las marcas --createFromSnapshot y --enableStreamingEngine.

  • En la shell o terminal, crea un trabajo nuevo a partir de una instantánea. Por ejemplo:
    python -m MODULE \
        --project PROJECT_ID \
        --temp_location gs://STORAGE_BUCKET/tmp/ \
        --input gs://apache-beam-samples/shakespeare/* \
        --output gs://STORAGE_BUCKET/output \
        --runner DataflowRunner \
        --enable_streaming_engine \
        --create_from_snapshot=SNAPSHOT_ID \
        --region REGION \
        --streaming

    Reemplaza lo siguiente:

    • MAIN_CLASS o MODULE: Para las canalizaciones de Java, es la ubicación de la clase principal que contiene tu código de canalización. Para las canalizaciones de Python, es la ubicación del módulo que contiene el código de tu canalización. Por ejemplo, cuando se usa el ejemplo de WordCount, el valor es org.apache.beam.examples.WordCount.
    • PROJECT_ID: El ID del proyecto de Google Cloud.
    • STORAGE_BUCKET: Es el bucket de Cloud Storage que usas para los elementos de trabajo temporales y el resultado final.
    • SNAPSHOT_ID: Es el ID de la instantánea a partir de la que deseas crear un trabajo nuevo.
    • REGION: Es la ubicación en la que deseas ejecutar el nuevo trabajo de Dataflow.

Cuando se crean trabajos a partir de instantáneas de Dataflow, sucede lo siguiente:

  • Los trabajos que se crean a partir de instantáneas deben ejecutarse en la misma región en la que se almacena la instantánea.
  • Si una instantánea de Dataflow incluye instantáneas de fuentes de Pub/Sub, los trabajos creados a partir de una instantánea de Dataflow ejecuta seek de forma automática a esas instantáneas de Pub/Sub como fuentes. Debes especificar los mismos temas de Pub/Sub que usa el trabajo de origen cuando creas trabajos desde esa instantánea de Dataflow.

  • Si una instantánea de Dataflow no incluye instantáneas de fuentes de Pub/Sub y el trabajo de origen usa una fuente de Pub/Sub, debes especificar un tema de Pub/Sub cuando crees trabajos desde esa instantánea de Dataflow.

  • Los trabajos nuevos que se crearon a partir de una instantánea aún están sujetos a una verificación de compatibilidad de actualización.

Limitaciones conocidas

Las siguientes limitaciones se aplican a las instantáneas de Dataflow:

  • No puedes crear trabajos a partir de instantáneas con plantillas o el editor de Dataflow SQL.
  • El plazo de vencimiento de la instantánea solo se puede establecer a través de Google Cloud CLI.
  • Las instantáneas de Dataflow solo admiten instantáneas de fuentes de Pub/Sub.
  • Las instantáneas de receptor no son compatibles. Por ejemplo, no puedes crear una instantánea de BigQuery cuando creas una instantánea de Dataflow.

Soluciona problemas

En esta sección, se proporcionan instrucciones para solucionar problemas comunes de la interacción con instantáneas de Dataflow.

Antes de comunicarte con el equipo de asistencia, asegúrate de haber descartado los problemas relacionados con las limitaciones conocidas y los que aparecen en las siguientes secciones de solución de problemas.

Se rechazó la solicitud de creación de instantáneas

Después de enviar una solicitud de creación de instantánea, ya sea desde la consola de Google Cloud o la CLI de gcloud, el servicio de Dataflow realiza una verificación de condición previa y muestra cualquier mensaje de error. La solicitud de creación de instantáneas se puede rechazar por varios motivos que se especifican en los mensajes de error, por ejemplo, si un tipo de trabajo no es compatible o una región no está disponible.

Si la solicitud se rechaza porque el trabajo es demasiado antiguo, debes actualizarlo antes de solicitar una instantánea.

No se pudo crear la instantánea

La creación de instantáneas puede fallar por varias razones. Por ejemplo, el trabajo de origen se canceló o el proyecto no tiene los permisos correctos para crear instantáneas de Pub/Sub. Los registros job-message del trabajo contienen mensajes de error de la creación de la instantánea. Si falla la creación de la instantánea, se reanuda el trabajo de origen.

No se pudo crear un trabajo a partir de una instantánea

Cuando crees un trabajo a partir de una instantánea, asegúrate de que la instantánea exista y no esté vencida. El trabajo nuevo se debe ejecutar en Streaming Engine.

Para problemas de creación de trabajos comunes, consulta la guía de solución de problemas de Dataflow. En particular, los trabajos nuevos creados a partir de instantáneas están sujetos a una verificación de compatibilidad de actualización en la que se exige que el trabajo nuevo sea compatible con el trabajo de origen de la instantánea.

El trabajo creado a partir de la instantánea hace poco progreso

Los registros job-message del trabajo contienen mensajes de error de la creación de trabajos. Por ejemplo, es posible que veas que el trabajo no puede encontrar las instantáneas de Pub/Sub. En este caso, verifica que las instantáneas de Pub/Sub existan y no estén vencidas. Las instantáneas de Pub/Sub vencen en cuanto el mensaje más antiguo de una instantánea tenga más de siete días. El servicio de Pub/Sub podría quitar automáticamente las instantáneas vencidas de Pub/Sub.

En el caso de los trabajos creados a partir de instantáneas de Dataflow que incluyen instantáneas de origen de Pub/Sub, el trabajo nuevo puede tener muchas tareas pendientes de Pub/Sub que procesar. El ajuste de escala automático de transmisión puede ayudar al trabajo nuevo a quitar las tareas pendientes más rápido.

Es posible que el trabajo de origen de la instantánea ya esté en mal estado antes de que se cree la instantánea. Comprender por qué el trabajo de origen está en mal estado puede ayudar a resolver problemas del trabajo nuevo. Para obtener sugerencias comunes de depuración de trabajos, consulta la guía de solución de problemas de Dataflow.