Antes de la marca de agua, permítanme hablar sobre el concepto de tiempo. Hay varias ventanas de tiempo en https://blog.51cto.com/mapengfei/2554577. En la producción real, ¿a qué hora se genera la ventana? ¿Cuándo ocurrió el incidente? ¿Es hora de entrar en el programa flink? Todavía es el momento en que flink comenzó a procesar
Flink proporciona un conjunto de configuraciones de soluciones de diseño
que se pueden configurar directamente en el código env
val env = StreamExecutionEnvironment.getExecutionEnvironment
// env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime) //以事件时间作为窗口聚合
//env.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime) //以数据进入flink的时间作为窗口时间
// env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime) //以Flink实际处理时间作为窗口时间
Semántica del tiempo
Solo se puede decir que en diferentes escenarios, hay escenarios de uso en cada momento, y la implementación específica se basa en la situación real.
Establecer en código
Podemos llamar al método setStreamCharacteristic en el entorno de ejecución directamente en el código para establecer el
tiempo específico de las características de tiempo de la transmisión , y también debemos extraer la marca de tiempo de los datos.
Si desea utilizar la hora del evento, también debe establecer qué campo y Formato; de lo contrario, Flink no sabrá qué campo usas
val env = StreamExecutionEnvironment.getExecutionEnvironment
// Agregue características de tiempo a cada flujo creado por env desde el momento de la llamada
env.setStreamTimeCharcteristic (TimeCharacteristic.EventTime)