Implementación y monitoreo de Flink Back Pressure (contrapresión)

Descargo de responsabilidad: esta serie de blogs se compila en base a videos de SGG, que es muy adecuado para que todos puedan comenzar.

1. ¿Qué es la contrapresión?
Si ve advertencias de contrapresión para tareas (como nivel alto), significa que la velocidad de generación de datos es más rápida que la velocidad de consumo de los operadores posteriores. Tome un trabajo simple de Fuente -> Sumidero como ejemplo. Si puede ver una advertencia para el origen, significa que el sumidero está consumiendo datos a un ritmo más lento que el que genera el origen. Sink está aplicando contrapresión a Source.

Muchas situaciones pueden causar contrapresión. Por ejemplo, GC hace que los datos entrantes se acumulen, o una fuente de datos alcanza su punto máximo a la velocidad a la que envía datos. Si la contrapresión no se maneja correctamente, puede provocar el agotamiento de los recursos y, en el peor de los casos, la pérdida de datos.

Mira un ejemplo sencillo. Suponga que la canalización de flujo de datos (resumida como fuente, trabajo de transmisión y sumidero) procesa datos a una velocidad de 5 millones de elementos por segundo en un estado estable, como se muestra en la siguiente situación normal (una barra negra representa 1 millón de elementos y la La siguiente figura representa la instantánea del sistema 1 en segundos):

 Si la velocidad a la que Source envía datos alcanza un pico en un momento determinado, los datos generados por segundo se duplican y la capacidad de procesamiento posterior permanece sin cambios:

Velocidad de procesamiento de mensajes < velocidad de envío de mensajes, congestión de mensajes, el sistema no funciona correctamente. ¿Cómo manejar esta situación?

R. Estos elementos se pueden eliminar, sin embargo, para muchas aplicaciones de transmisión, la pérdida de datos es inaceptable.
B. Guarde en caché los mensajes congestionados y dígale al remitente del mensaje que disminuya la velocidad del envío de mensajes. El caché de mensajes debe ser duradero porque, en caso de falla, estos datos deben reproducirse para evitar la pérdida de datos.


Hilo de muestreo de dos implementaciones de contrapresión

El monitoreo de la contrapresión funciona tomando muestras repetidamente del seguimiento de la pila de una tarea en ejecución, JobManager llama repetidamente a Thread.getStackTrace() en el trabajo.

Si las muestras muestran que el subproceso de la tarea está atascado en una llamada de método interno, entonces hay contrapresión en la tarea.

De forma predeterminada, JobManager activa 100 seguimientos de pila por tarea cada 50 ms para determinar la contrapresión. La proporción que se ve en la interfaz web indica cuántos seguimientos de pila están bloqueados en llamadas de métodos internos, por ejemplo, 0.01 significa que solo 1 del método está atascado. La comparación de estado y ratio es la siguiente:
OK: 0 <= Ratio <= 0,10
LOW: 0,10 <Ratio <= 0,5
HIGH: 0,5 <Ratio <= 1

Para no sobrecargar TaskManager con muestras de seguimiento de pila, los datos de muestra se actualizan cada 60 segundos.

configuración

El número de muestras para JobManager se puede configurar con:

web.backpression.refresh-interval, el tiempo después del cual las estadísticas se descartan y actualizan (predeterminado: 60000, 1 minuto).

web.backpression.num-samples Número de muestras de seguimiento de pila utilizadas para determinar la contrapresión (predeterminado: 100).

web.backpression.delay- between-samples, Retraso entre muestras de seguimiento de pila para determinar la contrapresión (predeterminado: 50, 50 ms).

3. Pantalla web
En la interfaz de trabajo de Flink WebUI, puede ver la página de opciones de Contrapresión.

Muestreo
Indica que JobManager activa el muestreo de seguimiento de pila para las tareas en ejecución. Con la configuración predeterminada, tardará unos cinco segundos.

estado de contrapresión

operación normal

 estado de contrapresión

Cuatro comparaciones de Spark Streaming
La contrapresión de Spark Streaming se introduce después de la versión 1.5. En la versión anterior, sólo limitando la velocidad máxima de consumo. La desventaja de este límite de velocidad es obvia: si la capacidad de procesamiento posterior supera este límite máximo, se desperdiciarán recursos. Además, es necesario realizar mediciones y estimaciones de presión para cada trabajo de Spark Streaming, y el costo es relativamente alto.

Desde la versión 1.5, se introdujo la contrapresión para ajustar automáticamente la tasa de transmisión de datos. Escucha el evento onBatchCompleted de todos los trabajos y estima una tasa basada en el procesamientoDelay, schedulingDelay, la cantidad de registros en el lote actual y los eventos de finalización de procesamiento. Se utiliza para el número máximo de registros que el flujo de actualización puede procesar por segundo. Se ajustará de acuerdo con la capacidad de datos para garantizar el buen funcionamiento de Spark Streaming.

Por el contrario, la contrapresión de Spark Streaming es relativamente simple y se basa principalmente en la ejecución de tareas posteriores para controlar la velocidad de subida de Spark Streaming. El mecanismo de contrapresión de Flink es diferente. La contrapresión se determina tomando muestras de las trazas de la pila dentro de un cierto período de tiempo y monitoreando la relación de bloqueo.

 
-----------------------------------
©Copyright pertenece al autor: de 51CTO blogger Crayon Shin-chan v Para trabajos originales, comuníquese con el autor para obtener la autorización de reimpresión;
de lo contrario, será legalmente responsable

Supongo que te gusta

Origin blog.csdn.net/philip502/article/details/127946913
Recomendado
Clasificación