A diferencia de un scheduled workflow, que se ejecuta según una programación predefinida (por ejemplo, todos los días a la 1:00 a. m.), un flujo de trabajo activado es un modelo de procesamiento de datos bajo demanda y orientado a eventos. Una señal externa, como la carga de un archivo, la llegada de un mensaje, una llamada a una API o un clic manual, desencadena su ejecución en tiempo real. Esto proporciona una excelente capacidad de respuesta y flexibilidad para el procesamiento de datos.
|
Función |
Flujo de trabajo programado |
Flujo de trabajo activado |
|
Mecanismo de activación |
Programación fija (expresión cron) |
Señal externa (evento, API, manual) |
|
Modelo de ejecución |
Programado y predecible |
Reactivo y bajo demanda |
|
Casos de uso |
Almacén de datos por lotes T+1, informes programados |
Procesar archivos al llegar, integración con sistemas empresariales, reparación manual de datos |
|
Ventajas clave |
Fiabilidad y programación predecible |
Capacidad de respuesta en tiempo real y flexibilidad |
Métodos de activación compatibles
Un flujo de trabajo activado admite tres métodos de activación. Elija uno según su escenario.
|
Método de activación |
Iniciador |
Escenarios principales |
Puntos clave |
|
Activación por evento |
Origen de evento externo (como OSS o ApsaraMQ for Kafka) |
ETL orientado a eventos: Procese archivos conforme llegan o active cómputo en tiempo real a partir de mensajes. |
Primero debe Create a trigger y asociarlo con el flujo de trabajo. Esto solo surte efecto en el entorno de producción. |
|
Activación manual |
Usuario (desarrollador/ingeniero de O&M) |
Tareas ad hoc: Procesamiento o análisis de datos único. |
Puede ejecutar manualmente el flujo de trabajo tanto en los entornos de desarrollo como de producción. Esta es la alternativa recomendada a los flujos de trabajo manuales. |
|
Activación por API |
Sistema externo (a través de OpenAPI) |
Integración de sistemas: Activado por callbacks de sistemas empresariales (como CRM o ERP) para iniciar el procesamiento de datos. |
Debe llamar a una operación de OpenAPI y contar con los permisos necesarios. |
Inicio rápido: Crear un flujo de trabajo activado manualmente
Esta sección le guía paso a paso para crear un flujo de trabajo activado sencillo y ejecutarlo manualmente, de modo que pueda experimentar rápidamente el proceso de extremo a extremo.
Paso 1: Crear un flujo de trabajo activado
Vaya a la página Workspaces en la consola de DataWorks. En la barra de navegación superior, seleccione la región deseada. Busque el espacio de trabajo correspondiente y elija en la columna Actions.
En el panel de navegación izquierdo, haga clic en
y luego haga clic en en el lado derecho de Project Directory para ir a la página Create Workflow.En el cuadro de diálogo que aparece, en la página Create Workflow, establezca Scheduling Type en Triggered scheduling. Introduzca un Name para el flujo de trabajo y haga clic en Confirm para crearlo.
Paso 2: Orquestar el flujo de trabajo y desarrollar nodos
Haga clic en + Add Node en la barra de herramientas para abrir la lista de nodos. Arrastre un nodo Shell desde la lista de tipos de nodo a la izquierda hacia el lienzo, introduzca un nombre y complete la creación.
-
Haga doble clic en el nodo Shell para ir a la página de edición de código e introduzca el siguiente código:
echo "Hello, Trigger Workflow! Current time is ${bizdate}" Haga clic en el botón Save en la barra de herramientas.
Paso 3: Depurar y ejecutar (entorno de desarrollo)
Regrese al lienzo del flujo de trabajo y haga clic en el icono
en la barra de herramientas superior.En el cuadro de diálogo que aparece, introduzca el Value Used in This Run para el flujo de trabajo (por ejemplo, si hoy es 20260310,
bizdatedebe reemplazarse con20260309).Después de un momento, en el registro de ejecución en la parte inferior, podrá ver el estado de ejecución del nodo y la salida del comando
echo.
Paso 4: Desplegar y ejecutar (entorno de producción)
En el lienzo del flujo de trabajo, haga clic en el botón Deploy
y siga las indicaciones para completar el proceso de despliegue.Una vez completado el despliegue correctamente, vaya a Operation Center > Manually Triggered Task O&M > Manually Triggered Task> Triggered Workflow.
Busque el flujo de trabajo que acaba de desplegar y haga clic en Run en la columna Operation.
En el cuadro de diálogo que aparece, haga clic en Run nuevamente para activar una instancia del flujo de trabajo en el entorno de producción. Puede consultar los detalles de esta ejecución en la página Manual Instances.
Ahora domina el uso básico de los flujos de trabajo activados. A continuación, exploraremos las capacidades más avanzadas de activación por eventos.
Ejemplo avanzado: Crear un flujo de trabajo activado por eventos
Escenario 1: Un nuevo archivo llega a OSS y activa automáticamente el procesamiento de datos
Objetivo: Cuando se carga un nuevo archivo CSV en un directorio específico de OSS, activar automáticamente un flujo de trabajo que imprima la ruta del archivo.
Paso 1: Crear un activador de OSS
Vaya a Operation Center > Scheduling Settings > Trigger Management.
-
Haga clic en Create Trigger y configure lo siguiente:
NotaPara obtener descripciones detalladas de los parámetros, consulte OSS trigger.
Trigger Name: Introduzca un nombre personalizado, como
oss_new_file_trigger.Applicable Workspace: Seleccione el espacio de trabajo destino donde reside el flujo de trabajo.
Trigger Event Type: Seleccione
Object Storage Service (OSS).Trigger Event: Seleccione
oss:ObjectCreated:PutObject(u otro evento de carga).Bucket Name: Seleccione su bucket de OSS.
File Name: Especifique la ruta y el formato del archivo que desea monitorear. Se admiten comodines. Por ejemplo, para monitorear todos los archivos
.csven el directorioinput/, introduzcainput/*.csv.-
Role Configuration: Si es la primera vez que lo usa, realice la One-Click Authorization y seleccione el rol llamado
DataWorks-EventBridge-OSS-MNS-Role-*************.*************representa un número de identificación de 13 dígitos generado aleatoriamente para garantizar la unicidad.
Haga clic en Confirm para completar la creación del activador.
Paso 2: Crear y asociar un flujo de trabajo
Siga los pasos en Quick start: Create a manually triggered workflow para crear un nuevo flujo de trabajo activado llamado
process_oss_file_workflow.En el panel derecho del lienzo del flujo de trabajo, vaya a Scheduling Settings > Scheduling Policy.
-
En la lista desplegable Trigger, seleccione el activador
oss_new_file_triggerque acaba de crear.Después de seleccionar un activador, puede usar
${workflow.triggerMessage}en las tareas internas para obtener el cuerpo completo del mensaje, o usar${workflow.triggerMessage.xxx}para obtener el valor de un campo específico en el cuerpo del mensaje.
Paso 3: Desarrollar un nodo y analizar sintácticamente los parámetros del evento
Haga clic en + Add Node en la barra de herramientas para abrir la lista de nodos. Arrastre un nodo Shell desde la lista de tipos de nodo a la izquierda hacia el lienzo, introduzca un nombre y complete la creación.
-
Haga doble clic en el nodo y escriba código para recuperar e imprimir la ruta del archivo desde el evento de activación.
-
Uso general: El siguiente uso de parámetros aplica a la mayoría de los mensajes de eventos.
# When a trigger fires the workflow, event info is passed in via the built-in variable workflow.triggerMessage # We can get the full path of the uploaded file via ${workflow.triggerMessage.data.oss.object.key} echo "========= Start Processing OSS File =========" message='${workflow.triggerMessage}' echo "Raw Value: ${message}" # Extract the file name from the event message FILE_PATH='${workflow.triggerMessage.data.oss.object.key}' echo "A new file has arrived: ${FILE_PATH}" # Add specific processing logic here echo "========= Finish Processing OSS File =========" -
Caso especial: Algunos nodos, como los nodos Shell, tienen sus propias reglas de sintaxis. Antes de que se ejecute el nodo, el motor de programación primero sustituye el contenido del mensaje en el texto del script y luego lo pasa al intérprete de Shell para su ejecución. Como resultado, las comillas, espacios y saltos de línea en el mensaje participan directamente en el análisis sintáctico de la sintaxis de Shell. Esto puede provocar que los espacios o saltos de línea en el parámetro rompan la estructura original del código después de que el nodo recupere el parámetro. En este caso, puede usar un heredoc para leer el mensaje, lo cual evita la mayoría de los problemas con caracteres especiales:
# Use a heredoc to safely capture the raw text substituted from ${workflow.triggerMessage}. message=$(cat <<'__DW_TRIGGER_MESSAGE__' ${workflow.triggerMessage} __DW_TRIGGER_MESSAGE__ ) # Scenario 1: Get the entire raw message printf 'Raw Value: %s\n' "$message" # Scenario 2: If you need only a specific field, use Python to parse the JSON and extract the value dt=$(printf '%s' "$message" | /home/tops/bin/python3 -c 'import json,sys; print(json.load(sys.stdin).get("body",{}).get("dt",""))') printf 'dt=%s\n' "$dt"Nota${workflow.triggerMessage}: Recupera el cuerpo completo del mensaje de evento en formato JSON. Puede obtener el formato específico del mensaje para OSS desde EventBridge > Event Bus >
DATAWORKS_TRIGGER_FOR_BUCKET_<OSS_Bucket_Name>> Event Tracing > Event Details.
-
Paso 4: Depurar y publicar
-
Depuración:
Regrese al lienzo del flujo de trabajo y haga clic en el botón Run
.-
En el cuadro de entrada Trigger Message Body, pegue un JSON de evento de OSS simulado. Puede copiar y modificar el valor
keydel "Message Format Sample" en la página de configuración del activador. A continuación se muestra un ejemplo sencillo.{ "data": { "oss":{ "object": { "key": "input/test_file_20260310.csv" } } } } Haga clic en Run y compruebe si
input/test_file_20260310.csvse imprime correctamente en los registros.
Publicación: Una vez que la depuración sea exitosa, haga clic en el botón Publish para desplegar el flujo de trabajo en el entorno de producción. Los activadores de eventos solo surten efecto en el entorno de producción.
Paso 5: Verificar en producción
-
Use la consola de OSS o una herramienta cliente para cargar un archivo CSV en el bucket y la ruta (por ejemplo, el directorio
input/) que configuró en el activador. Vaya a Operation Center de DataWorks > Manually Triggered Task O&M > Manually Triggered Task > Triggered Workflow. Aparecerá el flujo de trabajo
process_oss_file_workflowpublicado correctamente.-
Espere un momento y luego vaya a Operation Center de DataWorks > Manually Triggered Task O&M > Triggered Workflow Instance. Se activa automáticamente una nueva instancia del flujo de trabajo. Haga clic para consultar sus registros y verificar que la ruta del archivo se procesó correctamente.
===== Start Processing 0SS File ===== Raw Value: {"datacontenttype":"application/json;charset=utf-8","aliyunaccountid":"1162423445433459","data":{"eventVersion":"1.0","responseElements":{"requestId":"69B1083F7A439F343040ABCD"}, "eventSource":"acs:oss","eventTime":"2026-03-11T06:14:23.000Z","requestParameters":{"sourceIPAddress":"140.205.11.13"},"eventName":"0bjectCreated:Post0bject","userIdentity":{"principalId":"1162423445433459"}, "region":"cn-hangzhou","oss":{"bucket":{"name":"dwoss1024","arn":"acs:oss:cn-hangzhou:1162423445433459:dwoss1024","virtualBucket":"","ownerIdentity":"1162423445433459"},"ossSchemaVersion":"1.0","object":{"size":59537,"objectMeta": {"mimeType":"text/csv"},"deltaSize":0,"eTag":"63B4BA5A45AEFC679B9A917E8DDF0D32","key":"input/2013-2020-global-PS4-game-sales.csv"}}},"subject":"acs:oss:cn-hangzhou:1162423445433459:dwoss1024/input/2013-2020-global-PS4-game-sales.csv","aliyunoriginalaccountid":"1162423445433459","source":"acs.oss","type":"oss:0bjectCreated:Post0bject","aliyunpublishtime":"2026-03-11T06:14:23.959Z","specversion":"1.0","aliyuneventbusname":"DATAW0RKS_TRIGGER_F0R_BUCKET_dwoss1024","id":"69B1083F7A439F343040ABCD","time":"2026-03-11T06:14:23.000Z","aliyunregionid":"cn-hangzhou"}A new file has arrived: input/2013-2020-global-PS4-game-sales.csv ====== Finish Processing 0SS File =========
Mejor práctica: Diseño idempotente
Debido a factores como fluctuaciones en la red, los eventos de OSS pueden entregarse más de una vez. Para evitar el procesamiento duplicado de datos, se recomienda implementar idempotencia en su lógica de negocio. Un enfoque común es consultar una tabla de registros (como una tabla de MaxCompute) antes de procesar un archivo. Use el ETag del archivo o su ruta única como identificador y omita el archivo si ya se ha procesado.
Escenario 2: La llegada de mensajes de Kafka impulsa el cómputo en tiempo real
Objetivo: Monitorear registros de comportamiento de usuarios en Kafka. Cuando lleguen nuevos mensajes, active un flujo de trabajo para analizarlos sintácticamente y ejecutar diferentes lógicas según el contenido.
Paso 1: Crear un activador de Kafka
Vaya a Operation Center > Scheduling Settings > Trigger Management y haga clic en Create Trigger.
-
Configure los siguientes ajustes:
Trigger Name:
kafka_user_action_trigger.Trigger Event Type: Seleccione ApsaraMQ for Kafka.
Kafka Instance y Topic: Seleccione la instancia y el tema que desea monitorear.
ConsumerGroupId: Se recomienda seleccionar Quick Create. El sistema genera automáticamente un ID de grupo de consumidores para evitar conflictos con otras aplicaciones.
Key (opcional): Puede especificar una clave de mensaje. Solo los mensajes cuya clave coincida exactamente con el valor especificado activarán el flujo de trabajo.
Haga clic en OK.
Paso 2: Crear y asociar un flujo de trabajo
Siga los pasos en Quick start: Create a manually triggered workflow para crear un flujo de trabajo activado llamado
handle_user_action_workflow.En el panel derecho del lienzo del flujo de trabajo, seleccione Scheduling Settings > Scheduling Policy.
-
En la lista desplegable Trigger, seleccione el activador
kafka_user_action_triggerque acaba de crear.Después de seleccionar un activador, puede usar
${workflow.triggerMessage}en los nodos internos para recuperar el cuerpo completo del mensaje, o usar${workflow.triggerMessage.xxx}para recuperar el valor de un campo específico en el cuerpo del mensaje. (Importante) Dado que los mensajes pueden llegar con alta frecuencia, se recomienda configurar Maximum Parallel Instances for Internal Tasks, por ejemplo en
100, para evitar que un aumento repentino de mensajes sature los recursos de programación.
Paso 3: Desarrollar nodos y analizar sintácticamente JSON anidado
Suponga que el campo value del mensaje de Kafka es una cadena JSON con el siguiente formato: {"user_id": "1001", "action_type": "login", "timestamp": 1688888888}.
Haga clic en + Add Node en la barra de herramientas para abrir la lista de nodos. Arrastre un nodo Python desde la lista de tipos de nodo en el lado izquierdo hacia el lienzo.
-
Escriba código para analizar sintácticamente el mensaje. Dado que el campo
valuees en sí mismo una cadena, debe realizar un segundo análisis sintáctico de JSON en el código.import json # 1. Use the built-in variable to get the value field of the Kafka message, which is a JSON string message_value_str = '${workflow.triggerMessage.value}' print(f'Received raw message value string: ${message_value_str}') try: # 2. Parse this string into a JSON object (dictionary) in Python message_data = json.loads(message_value_str) user_id = message_data.get("user_id") action_type = message_data.get("action_type") print(f"Successfully parsed message. User ID: ${user_id}, Action: ${action_type}") # 3. Execute different business logic based on the action_type if action_type == 'login': # o.run_sql(f"INSERT OVERWRITE TABLE user_login_record PARTITION(ds='{bizdate}') VALUES ('{user_id}');") print("Processing login action...") elif action_type == 'purchase': print("Processing purchase action...") else: print("Unknown action type.") except json.JSONDecodeError as e: print(f"Error decoding JSON: {e}") # Exception handling logic, e.g., write the error message to a dedicated log table raise e # Raise the exception to fail the node for easier troubleshooting
Paso 4: Depurar y publicar
-
Depuración:
Regrese al lienzo del flujo de trabajo y haga clic en el botón Run
.-
En el Trigger Message Body, pegue el evento de Kafka simulado. Tenga en cuenta que el campo
valuees una cadena JSON escapada.{ "topic": "user-behavior-topic", "key": "some-key", "value": "{\"user_id\": \"1001\", \"action_type\": \"login\", \"timestamp\": 1688888888}" } Ejecute el flujo de trabajo y revise los registros para confirmar que el nodo Python puede analizar correctamente
user_idyaction_type.
Publicación: Una vez que la depuración sea exitosa, publique el flujo de trabajo en el entorno de producción.
Paso 5: Verificación en producción
-
Envíe un mensaje con el formato adecuado al tema de Kafka que configuró.
En la página de detalles del tema, haga clic en Quick Experience Message Sending and Receiving y seleccione el método de envío Console. Introduzca
some-keyen Message Key, introduzca{"user_id": "1001", "action_type": "login", "timestamp": 1688888888}en Message Content, establezca Send to Specified Partition en No y haga clic en Send. Si la página muestra Message sent successfully, la verificación se ha completado correctamente. Vaya a Operation Center de DataWorks > Manually Triggered Task O&M > Manually Triggered Task > Triggered Workflow. Aparecerá el flujo de trabajo
handle_user_action_workflowpublicado correctamente.-
En Operation Center > Manually Triggered Task O&M > Manual instance > Triggered Workflow Instance, compruebe si se ha activado una nueva instancia del flujo de trabajo y revise sus registros de ejecución.
2026-xxx 14:55:40 INFO ======================================================================== Received raw message value string: ${"user_id": "1001", "action_type": "login", "timestamp": 1688888888} Successfully parsed message. User ID: $1001, Action: $login Processing login action... 2026-xxx 14:55:40 INFO ========================================================================
Mejores prácticas: Concurrencia y ordenamiento
Control de concurrencia: Asegúrese de establecer un número máximo razonable de instancias paralelas para manejar picos de mensajes.
Garantía de orden: La programación de DataWorks no garantiza un procesamiento estrictamente ordenado de los mensajes. Si necesita asegurar que los mensajes del mismo usuario (o partición) se procesen en orden, implemente bloqueos distribuidos en su código de negocio (por ejemplo, basados en Redis o MaxCompute), o delegue la lógica de procesamiento a un motor de cómputo que garantice el consumo ordenado por partición (como Flink).
Diseño y configuración principales
Orquestación del flujo de trabajo
El proceso central de orquestación para flujos de trabajo activados es similar al de los flujos de trabajo programados. Para obtener más información, consulte Node/workflow orchestration.
Parámetros de programación
En el panel Scheduling Settings en el lado derecho del lienzo del flujo de trabajo, puede establecer parámetros globales para el flujo de trabajo. Todos los nodos dentro del flujo de trabajo pueden hacer referencia a estos parámetros.
Método de referencia: En el código del nodo, haga referencia a los parámetros del flujo de trabajo con el formato
${workflow.parameter_name}.-
Prioridad de parámetros: Los parámetros en DataWorks siguen una regla jerárquica de anulación. El orden de prioridad es: Parámetros de nodo > Parámetros de flujo de trabajo.
Para obtener más información sobre los parámetros, consulte Parameter design and flow .
Directiva de programación
Cuando varios flujos de trabajo o tareas se activan simultáneamente y los recursos del sistema se convierten en un cuello de botella, puede usar Priority y Weighting Strategy para implementar una programación inteligente de recursos y garantizar que las tareas más importantes se ejecuten primero.
Proteger el negocio principal: Establezca una prioridad más alta para los flujos de trabajo del negocio principal de modo que siempre se ejecuten antes que otros flujos de trabajo no esenciales.
-
Reducir la duración de la ruta crítica: Dentro de la misma instancia de flujo de trabajo, al usar la Priority weighting strategy, puede influir en el orden de ejecución de los nodos. Por ejemplo, con la estrategia Downstream weighting, los nodos en la ruta crítica que tienen más dependencias ascendentes reciben pesos dinámicos más altos y se ejecutan primero, lo que reduce eficazmente la duración total de ejecución del flujo de trabajo.
Elemento de configuración
Descripción
Priority
Define el nivel de prioridad absoluta de las instancias del flujo de trabajo en la cola de programación. Los niveles disponibles son 1, 3, 5, 7 y 8 (cuanto mayor sea el número, mayor será la prioridad). Las tareas o flujos de trabajo con mayor prioridad siempre obtienen recursos de programación antes que aquellos con menor prioridad.
Priority weighting strategy
Define cómo se calcula el peso dinámico de cada nodo (tarea) dentro de un flujo de trabajo en el mismo nivel de prioridad. Los nodos con pesos más altos se ejecutan primero.
-
Sin ponderación: Todos los nodos tienen el mismo peso base fijo.
-
Ponderación descendente: Los pesos de los nodos se ajustan dinámicamente. Cuantas más dependencias ascendentes tenga un nodo, mayor será su peso. Esta estrategia ayuda a que los nodos en la ruta crítica del DAG (grafo acíclico dirigido) se ejecuten primero. El peso se calcula como:
valor de peso inicial + suma de prioridades de todos los nodos ascendentes.
Maximum Parallel Instances for Internal Tasks
Controla el número máximo de instancias de este flujo de trabajo que pueden ejecutarse simultáneamente. Se utiliza para el control de concurrencia y la protección de recursos. Cuando el número de instancias en ejecución alcanza el límite, las nuevas instancias activadas posteriormente entran en estado de espera. Puede establecerlo en Allowed o especificar un valor máximo personalizado (hasta 100,000).
NotaSi establece el límite en un valor que excede la capacidad máxima del resource group, el cuello de botella real de concurrencia estará determinado por el límite físico del resource group.
-
El sistema de prioridades en DataWorks sigue una regla jerárquica de anulación: Especificación en tiempo de ejecución > Configuración a nivel de nodo > Configuración a nivel de flujo de trabajo.
Configuración a nivel de flujo de trabajo (base): Se configura en la Scheduling Policy del flujo de trabajo y sirve como configuración predeterminada para todos los nodos.
Configuración a nivel de nodo (local): En Scheduling Settings > Scheduling Policy de un nodo individual dentro del flujo de trabajo, puede establecer una Priority más alta para un nodo específico, lo cual anula la configuración a nivel de flujo de trabajo.
Especificación en tiempo de ejecución (temporal): Se especifica mediante el interruptor Runtime Priority Reset cuando activa manualmente una ejecución en el Operation and Maintenance Center. Esta configuración tiene la prioridad más alta, solo surte efecto para la ejecución actual y no modifica ninguna configuración permanente.
O&M y gestión
Monitoreo de instancias: Todas las instancias activadas o ejecutadas manualmente se pueden consultar, volver a ejecutar, finalizar y solucionar problemas en la página Operation Center > Manually Triggered Task O&M > Manual Instance.
Monitoreo y alertas: Puede crear una regla personalizada en Operation Center > Monitoring and Alerting > Rule Management. Después de activar Monitor Triggered Workflows, la regla monitorea únicamente las instancias de flujos de trabajo activados. Para obtener más información sobre cómo configurar la regla, consulte Rule management.
Clonar un flujo de trabajo: Haga clic con el botón derecho en un flujo de trabajo en el Project Directory y seleccione Clone para crear rápidamente una copia que incluye todos los nodos y dependencias. Para obtener más información, consulte Clone a workflow para flujos de trabajo programados.
Gestión de versiones: En el panel Versions en el lado derecho del lienzo del flujo de trabajo, puede consultar, comparar y restaurar versiones históricas de un flujo de trabajo. Para obtener más información, consulte Version management para flujos de trabajo programados.
Límites de uso y consideraciones
Entorno efectivo: El mecanismo de activación por evento solo surte efecto después de que el flujo de trabajo se despliega en el entorno de producción (Operation Center).
Cantidad de nodos: Un solo flujo de trabajo admite hasta 400 nodos. Se recomienda mantener la cantidad dentro de 100 para simplificar el mantenimiento.
Restricción de resource group: Los nodos creados en un flujo de trabajo activado solo pueden usar serverless resource groups.
Límite de concurrencia: El número máximo de instancias paralelas es 100,000, pero la concurrencia real está limitada por las especificaciones del resource group de programación que adquirió.
Programación a nivel de nodo: Cuando configura la programación a nivel de nodo, solo se admite Priority. No se admite Priority Weighting Policy.
Tipos de nodo no compatibles: EMR Spark Streaming, Flink SQL Streaming, Flink JAR Streaming, Flink Python Streaming y los nodos de comprobación de dependencias no se pueden usar en flujos de trabajo activados. Estos tipos de nodo solo se pueden desarrollar y ejecutar como nodos independientes.