【Spark】 Spark Streaming 的 contrapresión

1. Mito

Inserte la descripción de la imagen aquí
Antes de hablar sobre la contrapresión de Flink, hablemos primero sobre la contrapresión de Spark Streaming. La razón por la cual aparece la contrapresión de Spark Streaming, creo que todos deberían saber que se trata de picos de datos a corto plazo. La contrapresión de Spark Streaming se introdujo después de Spark 1.5. Anteriormente, solo podía estar limitada por la tasa de consumo máxima (esta es una estimación de medición de presión artificial). Para el formulario basado en Receiver, podemos configurar spark.streaming.receiver.maxRate Parámetros para limitar los datos de registro máximos que cada receptor puede recibir por segundo; para la recepción de datos de Enfoque directo, podemos configurar el parámetro spark.streaming.kafka.maxRatePerPartition para limitar el número máximo de registros leídos por cada partición Kafka en cada trabajo Numero

Antes de Spark 1.5, si la aplicación de transmisión no podía mantenerse al día con la velocidad de recepción de datos debido a recursos insuficientes, podría aliviar esta situación estableciendo el número máximo de datos recibidos por segundo. Para la forma de usar Receiver, puede establecer el parámetro 'spark.streaming.receiver.maxRate'; para la forma de usar Direct, establezca el parámetro 'spark.streaming.kafka.maxRatePerPartition'.

Las desventajas de este límite de velocidad son obvias: por ejemplo, si nuestra capacidad de procesamiento de back-end excede este límite máximo, resultará en un desperdicio de recursos. Cada tarea de transmisión de chispas debe ser probada y estimada a presión. El costo es relativamente alto.

Como resultado, Spark introdujo la función de contrapresión en la versión 1.5, por lo que ya no es necesario establecer el límite de velocidad anterior. Spark Streaming calculará automáticamente la velocidad requerida y la ajustará dinámicamente a medida que cambien las condiciones de procesamiento, pero la premisa es La condición es habilitar esta función configurando el parámetro 'spark.streaming.backpressure.enabled' = verdadero, porque esta función no está habilitada de manera predeterminada.

Este mecanismo se basa realmente en el concepto de PID de la teoría de control automático. Hablemos brevemente sobre la idea: para ajustar automáticamente la velocidad de transmisión de datos, se agrega un nuevo componente llamado RateController a la arquitectura original. Este componente hereda de StreamingListener, que escucha los eventos onBatchCompleted de todos los trabajos y se basa en ProcessingDelay, SchedulingDelay, la cantidad de registros procesados ​​por el lote actual y el evento de finalización del procesamiento para estimar una tasa; esta tasa se utiliza principalmente para actualizar la cantidad máxima de registros que la secuencia puede procesar por segundo. De esta manera, si la capacidad de procesamiento es buena, habrá un valor máximo mayor, y si la capacidad de procesamiento cae, se generará un valor máximo menor. Para garantizar que Spark Streaming se ejecute sin problemas.

código fuente de cálculo de tasa de pid
Inserte la descripción de la imagen aquí

Configure la contrapresión de Spark Streaming

spark.streaming.backpressure.initialRate: la velocidad máxima inicial a la que cada receptor recibe el primer lote de datos cuando el mecanismo de contrapresión está habilitado. El valor predeterminado no está establecido.

spark.streaming.backpressure.rateEstimator: clase de estimador de velocidad, el valor predeterminado es pid, Spark actualmente solo admite esto, puede implementarlo según sus necesidades.

spark.streaming.backpressure.pid.proportional: el peso utilizado para responder a errores (cambios entre el último lote y el lote actual). El valor predeterminado es 1, que solo se puede establecer en un valor no negativo. peso para la respuesta al "error" (cambio entre el último lote y este lote)

spark.streaming.backpressure.pid.integral: ponderación de respuesta ponderada por error, con supresión (amortiguación efectiva). El valor predeterminado es 0.2, que solo se puede establecer en un valor no negativo. peso para la respuesta a la acumulación de error. Esto tiene un efecto amortiguador.

spark.streaming.backpressure.pid.derived: El peso de la respuesta a las tendencias de error. Esto puede causar fluctuaciones en el tamaño del lote, lo que puede ayudar a aumentar / disminuir la capacidad rápidamente. El valor predeterminado es 0, que solo se puede establecer en un valor no negativo. peso para la respuesta a la tendencia de error. Esto puede causar fluctuaciones arbitrarias / inducidas por el ruido en el tamaño del lote, pero también puede ayudar a reaccionar rápidamente ante una capacidad aumentada / reducida.

spark.streaming.backpressure.pid.minRate: ¿Cuál es la tasa más baja que se puede estimar? El valor predeterminado es 100

Referencia: Contrapresión en parpadeo y chispas Streaming

1235 artículos originales publicados · 464 elogiados · 1.57 millones de visitas

Supongo que te gusta

Origin blog.csdn.net/qq_21383435/article/details/105526991
Recomendado
Clasificación