適切なウィンドウ関数/アサイナを選択できません。タスクは次のとおりです。まず、request_idといくつかのデータを持つSourceからデータを取得し、外部データベースに対して非同期要求を実行します。Apache Flinkの非同期リクエストとウィンドウ
// Here String is for request_id, Data is for treated data
DataStream Tuple2<String, Data> stream = ...
// async I/O queries
DataStream<Tuple2<String, String>> resultStream =
AsyncDataStream.unorderedWait(
stream,
new AsyncDatabaseRequest(),
1000,
TimeUnit.MILLISECONDS,
100
);
ここで、すべてのデータをrequest_idで収集して計算します。
DataStream Tuple2<String, Integer> = result
.map(val -> new Tuple2<String, Integer>(val.f0, val.f1.data_int))
.keyBy(0)
.window(...)
.sum(1);
問題はウィンドウ機能です。私は各ウィンドウが同じrequest_idを持つすべてのデータポイントを構成する必要がありますが、非同期クエリの時間はミリ秒から分に変わることがあります。一方、私は低い待ち時間が必要なので、ProcessingTimeSessionWindows.withGap(Time.minutes(10))
を使用することはできません。非同期関数から最後のデータを取得するとすぐに計算を実行する必要があります。
私にとって最良ののは、非同期関数のウィンドウ透かしを使用することです。非同期関数は、各クエリがいつ終了し、どのマッハポイントがそれを保持するかを確かに知っています。これは可能ですか?そのような作業のベストプラクティスは何ですか?