Optimización de la estrategia de programación de Flink: equilibrio de tareas

1. Antecedentes:

La implementación de tareas de Flink usa un clúster independiente basado en k8s. Primero implemente el clúster de Flink en el contenedor y luego envíe la tarea de Flink. El envío de la tarea de Flink se realiza simultáneamente con la creación y el registro del administrador de tareas.

Dos, el problema

Si el clúster tiene 35 administradores de tareas y 140 ranuras, y el paralelismo de un vértice es <140, las tareas que pertenecen al vértice se distribuyen de manera desigual en los administradores de tareas, lo que genera una carga de nodo desequilibrada.
Como sigue,

  • La topología flink tiene 5 vértices, dos de los cuales tienen un paralelismo de 140 y los otros tres se establecen en 10, 30, 35 según el número de particiones kafka. El paralelismo máximo de la tarea es 140, y la configuración de recursos de la tarea es: 35 [4 core 8 gb] nodos taskManager.
    Topología

  • Se puede encontrar a través de la interfaz de usuario web que incluso si cluster.evenly-spread-out-slots: true está configurado , las otras tres tareas de vértice aún se programarán para el mismo administrador de tareas.
    inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

3. Método de optimización

1. Análisis de problemas

  • La pregunta de apelación se puede simplificar a:

Supongamos que la lógica de una topología de tareas es: Vértice A(p=2)->Vértice B(p=4)->Vértice C(p=2).
Basado en la estrategia de división de compartir ranuras y prioridad de transmisión de datos locales, se divide en cuatro ExecutionSlotSharingGroup : {A1, B1, C1}, {A2, B2, C2}, {B3}, {B4},
si la configuración de recursos se divide cada administrador de tareas Para 2 ranuras, pueden ocurrir las siguientes asignaciones:

Ranura 1 Ranura2
Administrador de tareas1 {A1, B1, C1} {A2, B2, C2}
Administrador de tareas2 {B3} {B4}

La división de ranuras actual consiste en dividir la memoria de manera uniforme y no hay límite para la CPU. La distribución de atractivos conducirá a una carga de nodos desequilibrada. Si las tareas A y C consumen más recursos informáticos, TaskManager1 se convertirá en el cuello de botella de la informática. Idealmente, esperamos que el método de distribución sea:

Ranura 1 Ranura2
Administrador de tareas1 {A1, B1, C1} {B3}
Administrador de tareas2 {A2, B2, C2} {B4}

2. Optimización

modificar politica
  1. Al solicitar espacios para ExecutionSlotSharingGroup , primero ordénelos por la cantidad de tareas que contienen y priorice los grupos con más tareas.
  2. Retrasar la programación de tareas, esperar a que la cantidad de TaskManagers registrados sea lo suficientemente grande como para distribuir uniformemente ExecutionSlotSharingGroup y luego solicitar Slots para ellos
Efecto
  • Programación optimizada de tareas: múltiples tareas del mismo vértice se programan uniformemente en diferentes nodos del administrador de tareas
    inserte la descripción de la imagen aquí
    inserte la descripción de la imagen aquí

4. Comparación de rendimiento

1. Comparación de carga de CPU

  • Antes de la optimización: la carga de la CPU entre los nodos está relativamente distribuida y algunos nodos están en un estado de carga alta del 100 % durante mucho tiempo

    inserte la descripción de la imagen aquí

  • Después de la optimización: la carga de la CPU entre los nodos está relativamente concentrada y los nodos no estarán en un estado de carga del 100 % durante mucho tiempo.
    inserte la descripción de la imagen aquí

1.2 Agregar otra comparación de uso de CPU

En el diagrama de topología se puede ver que hay dos tareas con diferentes grados de paralelismo de 200/ 480. Al equilibrar el grupo compartido de tareas, se realiza el equilibrio de carga de la CPU de cada nodo tm, de modo que posteriormente podemos comprimir la cuota de recursos de tm .inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

2. acumulación de datos

Después de la optimización, la acumulación de datos se reduce a la mitad en comparación con antes, con una mejor capacidad de procesamiento y una menor latencia de datos en las mismas condiciones de recursos.

  • Antes de la optimización:
    inserte la descripción de la imagen aquí
  • Optimizado:
    inserte la descripción de la imagen aquí

6. Pensando

1. Saldo de tareas

Para topología: Vértice A(p=3)->Vértice B(p=4)->Vértice C(p=1). se distribuirá de la siguiente manera

Ranura 1 Ranura2
Administrador de tareas1 {A1, B1, C1} {A3, B3}
Administrador de tareas2 {A2,B2} {B4}

Vertex B->Vertex C tiene cuatro canales de transmisión de datos (B1->C1), (B2->C1), (B3->C1), (B4->C1), para conexiones no directas, sin importar qué subtarea esté asignado a En el grupo, hay al menos tres canales que requieren comunicación entre nodos.
Entonces, si equilibras las tareas primero al agrupar: {A1, B1}, {A3, B3}, {A2, B2}, {B4, C1}, no importa cómo las programes después, estarán equilibradas. Pero cuando la tarea num% slot num ! = 0, todavía hay una situación en la que las tareas se reúnen en una sola tm.

2. Mejoras a la programación diferida

Durante el período de flink que genera el plan de ejecución, la estrategia de retraso se genera de acuerdo con la lógica de la topología para reducir la percepción de la operación del usuario.

Supongo que te gusta

Origin blog.csdn.net/qq_30708747/article/details/120081265
Recomendado
Clasificación