フリンクタイマータイマーメカニズムと特定の実装

タイマー入門

タイマータイマーは、処理時間/イベントイベントの変更を検知して使用するためにFlink Streaming APIによって提供されるメカニズム
です。タイマー最も明白な方法はKeyedProcessFunctionです。タイマーをprocessElement()メソッドに登録し、onTimerメソッドをタイマートリガー時間としてオーバーライドします。時間特性に応じたコールバックロジック:

  1. 時間の処理-登録するcontext.timerService()。registerProcessingTime()を呼び出します。onTimer()は、システムのタイムスタンプがタイマーによって設定されたタイムスタンプに達したときにトリガーされます。
  2. イベント時間-Context.timerService()。registerEventTimer()を呼び出して登録します。onTimer()は、FlinkのウォーターマークがTimerで設定されたタイムスタンプに達するか超えるとトリガーされます。

タイマーの使用例

1.リアルタイムの統計インジケータは日ごとのステータスに保存され、ステータスは毎日0時にクリアされ、統計は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. また、ウィンドウメカニズムの重要な位置を占めています。ウィンドウを持ち上げると、当然、トリガー、つまりトリガーについて考えることができます。Flink独自のEventTimeTriggerのコードの一部であり、イベント時間機能のデフォルトのトリガーです。透かしがウィンドウの右端に達していない場合は、ウィンドウの右端にあるタイムスタンプにタイマーを登録します。タイマーの期限が切れると、onEventTime()メソッドがトリガーされ、ウィンドウが閉じます。
@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;
}

タイマーの特徴

  1. 作用されるkeyedStream:タイマーはkeyedstreamに登録されます
  2. タイマーは自動的に複製されます:タイマーは自動的に重複排除されます
  3. タイマーはflinkによって永続的に保存されます:タイマーはflinkによってチェックポイントされます
  4. タイマーは削除できます

タイマーの主成分分析


https://blog.csdn.net/nazeniwaresakini/article/details/104220113を参照できます

おすすめ

転載: blog.csdn.net/weixin_38813363/article/details/114886030