Los recursos de un trabajo se configuran antes de que inicie o se modifican mientras se ejecuta. En este tema se describe cómo configurar los recursos de un trabajo y los parámetros de cada modo.
Precauciones
Después de configurar los recursos, reinicie el trabajo para que los cambios surtan efecto.
Procedimiento
-
Acceda a la página de configuración de recursos.
Inicie sesión en la consola de Realtime Compute for Apache Flink.
En la columna Actions del espacio de trabajo deseado, haga clic en Console.
En la página , haga clic en el nombre del trabajo correspondiente.
En la pestaña Configuration, haga clic en Edit en el lado derecho de la sección Resources.
-
Modifique la información de recursos del trabajo.
Modo de recursos
Descripción
Detalles
Basic
En el modo básico, usted especifica los recursos totales (CPU y memoria JVM total) para cada TaskManager. El sistema distribuye estos recursos de manera uniforme entre todos los slots según la configuración de
taskmanager.numberOfTaskSlots. Este modo es suficiente para la mayoría de los trabajos sencillos.Expert
En el modo experto, usted configura los recursos de cada Slot Sharing Group (SSG). Después, Flink calcula las especificaciones necesarias para cada slot y solicita de forma dinámica los TaskManagers y slots correspondientes del pool de recursos. Para trabajos complejos donde una asignación de grano grueso puede provocar un uso bajo de los recursos, utilice el control de recursos de grano fino para ajustar cada operador. Esto mejora el aprovechamiento de los recursos y ayuda a cumplir los requisitos de rendimiento.
NotaEl modo experto solo es compatible con trabajos SQL.
Para obtener más información sobre conceptos como TaskManager, JobManager, Task y slot, consulte la documentación de Apache Flink Architecture.
Haga clic en Save.
Reinicie el trabajo.
Modo básico (grano grueso)
|
Parámetro |
Descripción |
|
Parallelism |
El paralelismo general del trabajo. |
|
Job Manager CPU |
Para operar de forma estable, un JobManager requiere como mínimo 0.5 núcleos y 2 GiB de memoria. Se recomienda usar 1 núcleo y 4 GiB. El valor máximo es de 16 núcleos. |
|
JobManager Memory |
El valor oscila entre 2 y 64 GiB. |
|
Task Manager CPU |
Para operar de forma estable, un TaskManager requiere como mínimo 0.5 núcleos y 2 GiB de memoria. Se recomienda usar 1 núcleo y 4 GiB. El valor máximo es de 16 núcleos. |
|
TaskManager Memory |
El valor oscila entre 2 y 64 GiB. |
|
TaskManager Slots |
Especifique el número de slots para cada TaskManager. |
TaskManager JVM Overhead
En el modo básico, cuando establece el valor de TaskManager Memory, el sistema reserva automáticamente una parte como JVM Overhead. De forma predeterminada, JVM Overhead representa el 10 % de la memoria total del TaskManager. Esta proporción se controla mediante el parámetro taskmanager.memory.jvm-overhead.fraction (valor predeterminado: 0.1). Para ajustar esta asignación, configure taskmanager.memory.jvm-overhead.fraction en el campo Other Configurations dentro de Running Parameters Configuration.
El Resident Set Size (RSS) que reporta el proceso de un TaskManager no incluye Page Cache. Si el TaskManager y el sistema operativo compiten por la memoria, pueden producirse errores de falta de memoria (OOM). Reserve como mínimo 400 MB de memoria adicional por encima de la memoria planificada para el TaskManager. Así cubrirá el uso de Page Cache del sistema operativo.
Recomendaciones de memoria para JobManager y solución de problemas de OOM:
Configuración mínima recomendada: configure como mínimo 0.5 núcleos y 2 GiB de memoria para el JobManager. De esta forma garantizará un funcionamiento estable. Para cargas de trabajo en producción, se recomienda 1 núcleo y 4 GiB.
Umbral de riesgo de OOM: si el uso de memoria del JobManager se mantiene constantemente alrededor del 80 %, el trabajo corre el riesgo de presentar errores de OOM. Aumente la memoria asignada para mitigar este riesgo.
Escenario de sincronización con Paimon (Direct Buffer Memory OOM): si su trabajo sincroniza grandes volúmenes de datos hacia Paimon y presenta el error
JobManager Direct Buffer Memory OOM, aumentejobmanager.memory.off-heap.sizede los 128 MB predeterminados a 512 MB o más. Establezca este parámetro en el campo Other Configurations dentro de Running Parameters Configuration.
Utilice las siguientes fórmulas para calcular los recursos necesarios:
Número de CU = MAX(CPU total para JobManager y TaskManagers, Memoria total para JobManager y TaskManagers / 4)
Número real de TaskManagers = ceil(Parallelism / Slots per TaskManager)
Slots reales por TaskManager = Parallelism / Número real de TaskManagers
Redondee los resultados de las divisiones al entero superior más cercano.
Las configuraciones de recursos no pueden superar los límites máximos predeterminados. Para solicitar un aumento de estos límites, envíe un ticket.
También puede establecer el parámetro
numberOfTaskSlotsen el campo Other Configuration dentro de la sección Parameters en la pestaña Configuration del trabajo. Esta configuración tiene el mismo efecto que el campo TaskManager Slots, pero prevalece sobre él.
Por ejemplo, suponga que establece el paralelismo en 12 y los slots por TaskManager en 4.
En este caso, Job Manager CPU es de 2 núcleos, JobManager Memory es de 4 GiB, Task Manager CPU es de 2 núcleos y TaskManager Memory es de 4 GiB.
En la consola de Realtime Compute for Apache Flink, el número real de TaskManagers es 3 y cada TaskManager tiene 4 slots.
El número real de TaskManagers y de slots por TaskManager se calcula de la siguiente manera:
Número real de TaskManagers = ceil(Paralelismo configurado / Slots configurados por TaskManager) = ceil(12 / 4) = 3.
Slots reales por TaskManager = Paralelismo / Número real de TaskManagers = 12 / 3 = 4.
Modo experto (grano fino)
El modo experto solo es compatible con trabajos SQL.
Si modifica el código SQL o la configuración de recursos después de desplegar un trabajo, vuelva a obtener el gráfico del plan de recursos para asegurar que el trabajo inicie correctamente.
Configurar los recursos básicos
|
Parámetro |
Descripción |
|
Job Manager CPU |
Para operar de forma estable, un JobManager requiere como mínimo 0.5 núcleos y 2 GiB de memoria. |
|
JobManager Memory |
Unidad: GiB. Por ejemplo, 4 GiB. El valor mínimo es 2 GiB y el máximo es 64 GiB. |
|
TaskManager Slots |
No aplica. |
Configurar los recursos de los slots
En Expert, haga clic en Get Plan Now para obtener el gráfico del plan de recursos.
Haga clic en el icono Editar
de un cuadro de slot. El gráfico del plan de recursos generado muestra varios cuadros de slot. Cada uno contiene la información del operador VERTEX y un valor de PARALLELISM.-
Modifique la configuración del slot. En el cuadro de diálogo, configure los parámetros CPU, Heap Memory, Off-Heap Memory y parallelism.
El paralelismo que establezca aquí se aplicará a todos los operadores dentro de este Slot Sharing Group. Una vez guardada la configuración, el sistema realiza automáticamente lo siguiente:
Establece el mismo paralelismo para todos los operadores de este Slot Sharing Group.
Asigna la memoria necesaria para el state backend, Python y los operadores según la lógica de cálculo del trabajo. Esta asignación se hace de forma automática.
Para un nodo Source, se recomienda establecer un paralelismo proporcional a su número de particiones. Es decir, el paralelismo debe ser un divisor del número de particiones. Por ejemplo, si un topic de Kafka tiene 16 particiones, establezca el paralelismo en 16, 8 o 4 para evitar el sesgo de datos.
Si establece un paralelismo demasiado bajo para un nodo Source, se puede generar un cuello de botella. Un único Source podría leer demasiados datos y reducir el rendimiento del trabajo.
Para los demás nodos, establezca el paralelismo de acuerdo con su tráfico de datos. Asigne un paralelismo mayor a los nodos con más tráfico.
NotaNotaEn el modo experto, el cuadro de diálogo de configuración del slot expone CPU, Heap Memory y Off-Heap Memory para su configuración manual. Otros componentes de memoria, como JVM Overhead, los búferes de red y la memoria del framework, se asignan automáticamente con sus proporciones predeterminadas. Estos componentes se preasignan cuando inicia el TaskManager y no se ajustan de forma dinámica durante la ejecución del trabajo.
Si encuentra errores de memoria insuficiente causados por estos componentes asignados automáticamente, configure los siguientes parámetros en el campo Other Configurations dentro de Running Parameters Configuration:
taskmanager.memory.jvm-overhead.fraction: tamaño de JVM Overhead como fracción de la memoria total del TaskManager. Valor predeterminado:0.1(10 %).taskmanager.memory.jvm-overhead.max: tamaño máximo de JVM Overhead.taskmanager.memory.jvm-overhead.min: tamaño mínimo de JVM Overhead.
Haga clic en OK.
Configurar los recursos de los operadores
De forma predeterminada, todos los operadores comparten un único Slot Sharing Group. Esto impide configurar sus recursos de manera individual. Para configurar los recursos de un operador específico, habilite Multiple SSG. Esta opción asigna un slot independiente a cada operador y le permite configurar sus recursos en dicho slot.
En la pestaña Configuration, haga clic en Edit en la sección Resources y establezca Mode en Expert.
-
(Opcional) Si no se muestra ningún plan de recursos, haga clic en Get Plan Now.
De forma predeterminada, el gráfico del plan de recursos generado muestra todos los operadores dentro de un único cuadro de slot.
-
Active el interruptor Multiple SSG y luego haga clic en Re-fetch.
Esta acción divide los operadores del grupo compartido en slots individuales.
-
Haga clic en el icono Editar
del cuadro de slot que corresponde al operador deseado y modifique los recursos del operador.En el cuadro de diálogo Modify slot, configure los parámetros CPU, Heap Memory, Off-Heap Memory y parallelism.
Haga clic en OK.
Escenario típico: una métrica Busy alta en el operador sink provoca contrapresión aguas arriba
Si la métrica Busy del operador sink se mantiene alta en la topología del trabajo y los operadores anteriores muestran contrapresión, el cuello de botella en la escritura aumenta la latencia del trabajo. Siga los pasos anteriores para establecer Mode en Expert, active Multiple SSG y aumente únicamente la CPU y la memoria del slot que corresponde al operador sink. Por ejemplo, aumente la CPU de 0.5 a 2 núcleos y la memoria de 2 a 4 GiB para acelerar las escrituras y reducir la contrapresión. Después del ajuste, vaya a la página O&M > Deployments y compruebe si mejoraron la métrica Busy del operador sink y la contrapresión anterior. Los valores de este ejemplo son solo de referencia y no garantizan el mismo resultado en su trabajo.
Paralelismo de operadores, estrategia de encadenamiento y State Expiration Time Settings
La configuración de State Expiration Time Settings solo es compatible con Ververica Runtime (VVR) 8.0.7 y versiones posteriores.
Configure el paralelismo, la estrategia de encadenamiento y State Expiration Time Settings para operadores individuales.
-
Haga clic en el icono Expandir
del cuadro VERTEX correspondiente.Al expandirlo, el cuadro VERTEX muestra cada nodo de operador, su valor de PARALLELISM y un icono de edición junto a cada operador.
NotaHaga clic en el icono Editar
de un VERTEX para establecer el paralelismo de todos los operadores dentro de ese VERTEX de forma masiva. Haga clic en el icono Editar
del operador.-
Configure los recursos del operador.
A continuación se describen los parámetros.
Parámetro
Descripción
Parallelism
El paralelismo del operador.
Chaining strategy
El encadenamiento conecta varios operadores en una sola tarea. Esto mejora el rendimiento porque reduce la transferencia de datos y la sobrecarga de serialización. Sin embargo, puede romper una cadena para tener un control más preciso del flujo de ejecución. Están disponibles las siguientes estrategias:
-
ALWAYS (predeterminado): el operador siempre se puede encadenar con los operadores anteriores y posteriores.
-
HEAD: el operador actual actúa como cabeza de una cadena. No se encadena con los operadores anteriores, pero sí permanece encadenado con los posteriores.
-
NEVER: el operador actual no se encadena con ningún operador anterior ni posterior.
State Expiration Time Settings
Establezca el tiempo de caducidad en segundos, minutos, horas o días. De forma predeterminada, el operador hereda el tiempo de caducidad de estado del trabajo, cuyo valor predeterminado es 1.5 días. Para configurar el tiempo de caducidad a nivel de trabajo, consulte Configure running parameters.
Nota-
Esta función solo es compatible con Ververica Runtime (VVR) 8.0.7 y versiones posteriores.
-
La configuración de TTL solo es compatible con operadores con estado.
-
La caducidad de estado es un mecanismo de limpieza aproximado. El sistema no garantiza que el estado caducado se elimine inmediatamente después de que transcurra el TTL. El tiempo real de limpieza depende de los patrones de acceso al estado en segundo plano y de las políticas de limpieza.
-
Haga clic en OK.
Preguntas frecuentes
¿Establecer el paralelismo equivale a consumir la misma cantidad de CU?
No. Parallelism se refiere al número de tareas concurrentes que se ejecutan en un trabajo. CU (Compute Unit) es la unidad de facturación y de recursos que usa Realtime Compute for Apache Flink. No tienen una relación de 1:1.
El consumo total de CU se calcula con la siguiente fórmula:
Consumo total de CU = Parallelism × CU por tarea
Las CU que consume cada tarea se determinan según la especificación de recursos por slot configurada para el trabajo. Al aumentar el paralelismo, aumenta el consumo total de CU. Sin embargo, este incremento es proporcional a la especificación de CU por tarea, no una relación simple de 1:1.
¿Por qué SET 'parallelism.default' no surte efecto en los trabajos SQL?
Usar SET 'parallelism.default' = 'N'; directamente en las instrucciones de un trabajo SQL no tiene efecto en Realtime Compute for Apache Flink. Para configurar el paralelismo, utilice uno de los siguientes métodos:
Establezca el paralelismo en la cláusula
WITHde la instrucción SQL correspondiente.Modifique el paralelismo en la interfaz de edición de la configuración de recursos en la página .
¿Qué debo hacer cuando un operador Print Sink o Join provoca recursos insuficientes o un rendimiento deficiente?
La acción adecuada depende del síntoma específico:
Print Sink causa escasez de recursos en el TaskManager: este problema no se resuelve solo con ajustes de parámetros. Evalúe sus necesidades de recursos según el volumen real de datos. Compruebe que los tipos de campo de la tabla de origen estén definidos correctamente (por ejemplo, use
BIGINTen lugar deSTRINGcuando corresponda) y asigne suficientes recursos al TaskManager para soportar la sobrecarga de depuración de Print Sink.El rendimiento de Join es deficiente aunque el uso de memoria sea bajo: aumente el número de CU. Sin embargo, si la causa raíz es un sesgo de datos, agregar más recursos podría no resolver el problema. Resuelva primero el sesgo de datos y luego evalúe si necesita recursos adicionales.
El trabajo se reinicia con frecuencia y presenta alta latencia de extremo a extremo: si el trabajo está en una fase de sincronización de estado completo tras un reinicio sin estado, intente establecer el número de slots en 1. Configure un paralelismo adecuado por separado y use una especificación de TaskManager de 1 núcleo y 4 GiB con una concurrencia moderada (por ejemplo, 10) para probar y optimizar el rendimiento.
Documentos relacionados
Para obtener información sobre técnicas de optimización de recursos, consulte High-performance Flink SQL optimization techniques.
En lugar de ajustar los recursos manualmente, habilite el ajuste automático de rendimiento. Para obtener más información, consulte Configure automatic performance tuning.
Para configurar los ajustes básicos, los parámetros de ejecución y el registro de un trabajo, consulte Configure job deployment information.
Supervise el estado de su trabajo con el servicio Flink Advisor. Para obtener más información, consulte Intelligent Job Diagnostics.