2017-06-14 8 views
1

最後の1時間、1週間、1ヶ月のデータで各イベントを処理する必要があります。そのイベントに対応する最後の1ヶ月間に同じIPが何回発生したかなど。Flinkストリーミングの最後の1時間、1週間、1月のデータによる処理イベント

私はウィンドウが一定時間のためだと思う私は現在のイベントに対応する最後の1時間で計算することはできません。

私はテーブル、ProcessFunctionまたはグローバルウィンドウを使用する必要がありますガイドをお願いします。または私はどのようなアプローチを取るべきですか?

答えて

3

Flinkでこの種のウィンドウ処理がサポートされていない理由は、必要な状態を守るためのメモリ要件と関係しています。正常に行われた(すなわち、10:00〜11:00の時間の)1時間当たりのイベントをカウントすることは、ゼロで開始し、各イベントで増分するカウンタを保持することを必要とするだけである。時間の終わりにタイマーが起動し、カウンターが放出されます。

これまでの60分間のイベントのカウントを提供するには、ウィンドウ・オペレーターがすべてのイベントのタイム・スタンプを保持し、結果を出すたびに多くのカウントを行う必要があります。

本当にこれを行うつもりなら、更新された結果を提供する頻度を決定することをお勧めします。たとえば、毎分1回の更新では、すべてのイベントではなく、分単位のカウントを保存するだけで済みます。

これは役に立ちますが、状況はまだかなり悪いです。たとえば、過去1か月間のイベント数を毎分提供するスライディングウィンドウを使用することができます。しかし、これはまた、60 * 24 * 30 = 43,200のウィンドウオブジェクトをインスタンス化するため、痛みを伴います。これらはすべて並行してカウントされます。

Flink APIのビルディングブロックはProcessFunctionです。これはウィンドウでこれを行うのには興味深い選択肢ですが、TriggersEvictorsの場合は、ウィンドウを固定することになります。 Flinkで保持されている状態を、スケジュールで放出するのではなく照会することも可能です(queryable state参照)。

+0

ありがとう私は同じことを試みます。 –

関連する問題