FLINKにブログを読みながら、私はApache Flinkでは、イベントストリームの遅延をどのように処理していますか?
「遅延(イベントは最大によって順不同である。1分)サービス提供高々60秒で」というフレーズ に出くわしたFLINKにはいくつかの記事を読んでいますFlinkでテクニック「Watermarks」に使用される順序外イベントの期間を定義していますか?そうでない場合は内部目的は何ですか?
FLINKにブログを読みながら、私はApache Flinkでは、イベントストリームの遅延をどのように処理していますか?
「遅延(イベントは最大によって順不同である。1分)サービス提供高々60秒で」というフレーズ に出くわしたFLINKにはいくつかの記事を読んでいますFlinkでテクニック「Watermarks」に使用される順序外イベントの期間を定義していますか?そうでない場合は内部目的は何ですか?
私は、Flinkでアウトオブオーダーイベントを管理する方法を簡単に説明しようとします。イベントの時間、順序、ウォーターマークは非常に近い概念なので、関係を理解した後にそのフレーズを理解していただければと思います。
ウォーターマークとアウトオブオーダーネスは、イベントタイムベースのDataStreamの概念です。ウォーターマークは、マークの前にもっと多くのイベントが発生しないと仮定するタイムマークとして記述することができます。 Flinkでウォーターマークを発行するメカニズムはいくつかあります。つまり、イベントを受け取るたびにウォーターマークを設定できます。また、タイムウィンドウでは、ウォーターマークを使用して、いつ評価するのが適切かをチェックします。
「ウォーターマーク」と「アウトオブオーダー」という概念は、ウォーターマークを使用してアウトオブオーダー管理を行う場合と基本的に同じです。あなたの場合、60秒の最大遅延を定義するには、受け取った最大タイムスタンプの60秒前にウォーターマークを設定するのと同じくらい簡単です。
/**
* This generator generates watermarks assuming that elements come out of order to a certain degree only.
* The latest elements for a certain timestamp t will arrive at most n milliseconds after the earliest
* elements for timestamp t.
*/
public class BoundedOutOfOrdernessGenerator extends AssignerWithPeriodicWatermarks<MyEvent> {
private final long maxOutOfOrderness = 3500; // 3.5 seconds
private long currentMaxTimestamp;
@Override
public long extractTimestamp(MyEvent element, long previousElementTimestamp) {
long timestamp = element.getCreationTime();
currentMaxTimestamp = Math.max(timestamp, currentMaxTimestamp);
return timestamp;
}
@Override
public Watermark getCurrentWatermark() {
// return the watermark as current highest timestamp minus the out-of-orderness bound
return new Watermark(currentMaxTimestamp - maxOutOfOrderness);
}
}
ここで何が起こっているかを理解することは困難であるブログ記事のコンテキストなし:
注文イベントのうち、管理についての公式サイト上で良い例があります。 – aljoscha
サービング遅延は、デモンストレーションの目的、すなわち、Flinkがアウト・オブ・オーダー・イベントをどのように処理するかを示すためのものである。実際のアプリケーションでは、イベントをシャッフルしてから送信するのは理にかなっていません。アウト・オブ・オーダー・イベントを処理する場合は、最大イベント遅延に依存する透かしを指定する必要があります。 –
Fabianの説明をありがとう。 –