Mecanismo de temporizador Flink Timer e implementación específica

Introducción al temporizador

El temporizador de temporizador es un mecanismo proporcionado por Flink Streaming API para detectar y utilizar el tiempo de procesamiento / cambios de eventos de eventos. La forma
más obvia para el temporizador es KeyedProcessFunction. Registre el temporizador en su método processElement () y luego anule su método onTimer como tiempo de activación del temporizador. lógica de devolución de llamada, según las características del tiempo:

  1. Tiempo de procesamiento: llame a context.timerService (). RegisterProcessingTime () para registrarse; onTimer () se activa cuando la marca de tiempo del sistema alcanza la marca de tiempo establecida por el temporizador
  2. Hora del evento: llame a Context.timerService (). RegisterEventTimer () para registrarse, onTimer () se activa cuando la marca de agua en Flink alcanza o excede la marca de tiempo establecida por Timer

Ejemplo de uso del temporizador

1. Los indicadores de estadísticas en tiempo real se almacenan en el estado por día, y el estado se borra a las 0 en punto todos los días, y las estadísticas se pueden volver a registrar en el método processElement ().

//按天实时统计指标并存储在状态中,每天0点清除状态重新统计,就可以在processElement()方法里注册Timer
ctx.timerService().registerProcessingTimeTimer(
  tomorrowZeroTimeStampMs(System.currentTimeMillis(),8)+1
)
public static long tomorrowZeroTimestampMs(long now,int timeZone){
    
    
  return now-(now+timeZone*3600000)%86400000+86400000
}
  1. También tiene una posición importante en el mecanismo de la ventana.Cuando levantas una ventana, naturalmente puedes pensar en Trigger, es decir, gatillo. Parte del código del propio EventTimeTrigger de Flink, es el disparador predeterminado bajo la función de tiempo del evento. Cuando la marca de agua no haya alcanzado el borde derecho de la ventana, registre el temporizador con la marca de tiempo en el borde derecho de la ventana. Una vez que expira el temporizador, se activa el método onEventTime () y luego se cierra la ventana.
@override
public TriggerResult onElement(Object element,long timestamp,TimeWindow window,TriggerContext ctx) throws Exeption{
    
    
   if(window.maxTimestamp()<=ctx.getCurrentWatermark()){
    
    
     return TriggerResult.FIRE;
   }else{
    
    
     ctx.registerEventTimeTimer(window.maxTimestamp())
     return TriggerResult.CONTINUE;
   }
}


@override
public TriggerResult onEventTime(long time,TimeWindow window,TriggerContext ctx){
    
    
   return time == window.maxTimestamp()?TriggerResult.FIRE:TriggerResult.CONTINUE;
}

Características del temporizador

  1. 作用 于 keyedStream : Los temporizadores se registran en un keyedstream
  2. Los temporizadores se replican automáticamente: los temporizadores se deduplican automáticamente
  3. Flink guarda los temporizadores de forma persistente: Flink marca los temporizadores
  4. los temporizadores se pueden eliminar

Análisis de principio de temporizadores

Puede hacer referencia a
https://blog.csdn.net/nazeniwaresakini/article/details/104220113

Supongo que te gusta

Origin blog.csdn.net/weixin_38813363/article/details/114886030
Recomendado
Clasificación