良いタイマー
タイマー入門
タイマータイマーは、処理時間/イベントイベントの変更を検知して使用するためにFlink Streaming APIによって提供されるメカニズム
です。タイマーの最も明白な方法はKeyedProcessFunctionです。タイマーをprocessElement()メソッドに登録し、onTimerメソッドをタイマートリガー時間としてオーバーライドします。時間特性に応じたコールバックロジック:
- 時間の処理-登録するcontext.timerService()。registerProcessingTime()を呼び出します。onTimer()は、システムのタイムスタンプがタイマーによって設定されたタイムスタンプに達したときにトリガーされます。
- イベント時間-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
}
- また、ウィンドウメカニズムの重要な位置を占めています。ウィンドウを持ち上げると、当然、トリガー、つまりトリガーについて考えることができます。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;
}
タイマーの特徴
- 作用されるkeyedStream:タイマーはkeyedstreamに登録されます
- タイマーは自動的に複製されます:タイマーは自動的に重複排除されます
- タイマーはflinkによって永続的に保存されます:タイマーはflinkによってチェックポイントされます
- タイマーは削除できます
タイマーの主成分分析
https://blog.csdn.net/nazeniwaresakini/article/details/104220113を参照できます