Flink tiene preguntas sobre WaterMark

Para aclarar la marca de agua Flink (WaterMark), es necesario aclarar varios conceptos.

El primero es el concepto de tiempo:

Hay tres conceptos de tiempo en Flink, a saber, el tiempo del evento, el tiempo de adquisición y el tiempo del sistema.

Hora del evento: tiempo generado en el mundo objetivo, como un registro de tiempo generado cuando un usuario hace clic en una página web, esta vez es la hora del evento.

Tiempo de recolección: el tiempo que usamos Flink para recolectar registros para llegar a Flink es el tiempo de recolección.

Hora del sistema: esta hora nos permite llamar al escribir código lógico, como escribir System.currentTimeMillis () en el programa

Con el concepto de tiempo, ¿qué tiempo comercial nos importa realmente? Al jefe no le importa cuando Flink lo recoge, ni le importa cuando lo llama en el sistema actual, por lo que la respuesta debe ser el momento en que se produjo el registro, es decir, cuando el usuario hizo clic.

Entonces, ¿cómo lidiamos con los eventos a través del tiempo del evento de registro?

Como se muestra a continuación:

Cuando hay una demora en la red, los datos No. 2 que ingresaron originalmente a la ventana A no ingresaron a la ventana A dentro de 0-5 segundos, pero aún aparecen en la ventana A después de la recolección.

Debido a que Flink registra el tiempo generado objetivamente de cada registro, los datos No. 2 se generan en 0-5 segundos, y Flink lo colocará en la ventana A. Es solo que se puso entre 5-10 segundos. En ese caso, ¿cuándo deberíamos cerrar la ventana?

Debido a que existe una hipótesis, si hay un dato que pertenece a esta ventana, aparecerá un año después. ¿No me llevaría un año cerrar la ventana? Entonces Flink estableció un tiempo de vencimiento para resolver este problema. El método de configuración es el siguiente:

Entre ellos, 10 segundos es el tiempo de vencimiento, y element._2 es ​​la marca de tiempo generada objetivamente que leemos del registro.

Aunque hay un tiempo de vencimiento, Flink no solo cierra la ventana después del tiempo de vencimiento.

De hecho, la ventana de cierre de Flink depende del efecto combinado del nivel del agua y el tiempo de expiración, entonces, ¿cuál es el nivel del agua?

La marca de agua se refiere al hecho de que Flink genera una marca de tiempo cada 200 ms, y su tamaño es igual al tiempo objetivo máximo en el conjunto de datos actual menos el tiempo de retraso.

Por qué Flink está configurado de esta manera, podemos cerrar directamente los datos de la ventana 0-5 después de un retraso de 10 segundos.

En realidad, esto se debe a que nuestros 15 segundos son un retraso de tiempo del sistema de 10 segundos, pero lo que queremos es un retraso de tiempo objetivo real de 10 segundos.

Puede que no sea fácil entender esto. Para dar un ejemplo exagerado, en el mundo objetivo, se generan diez datos dentro de 0-15 (incluida una ventana de 5 segundos, más un retraso de 10 segundos), y no estarán disponibles por otros 10 años Los datos se generan, ¿entonces Flink no debería cerrar la ventana?

De hecho, la ventana no debe cerrarse, porque cuando la computadora no conoce el tiempo objetivo del próximo registro, no sabe a dónde va la ventana en este momento. Solo cuando el tiempo objetivo sea superior a quince segundos, se cerrará la ventana anterior de 0-5 segundos.

Por lo tanto, introdujimos el concepto de nivel de agua para registrar el tiempo objetivo. Use este número para registrar el tiempo máximo en el mundo objetivo.

Solo necesitamos comparar: si el nivel del agua es mayor que la ventana + tiempo de retraso para determinar si se cierra la ventana.

Cuando el nivel del agua> ventana + tiempo de retraso ------> cerrar ventana

Cuando el nivel del agua <ventana + tiempo de retraso ------> no cierra la ventana

 

Supongo que te gusta

Origin www.cnblogs.com/laogou-idea/p/12693181.html
Recomendado
Clasificación