2

このを見てください:

// We create sessions for each id with max timeout of 3 time units
DataStream<Tuple3<String, Long, Integer>> aggregated = source
        .keyBy(0)
        .window(GlobalWindows.create())
        .trigger(new SessionTrigger(3L))
        .sum(2);

GlobalWindowこの例で(内で作成された)の 1 つのインスタンスを使用している理由を誰か説明してもらえますGlobalWindows#assignWindowsか?

着信イベントIDは独自のウィンドウ、つまりイベント、イベントなどWindow(a)を作成する必要があるようです。私が理解しているように、Flinkは対応するイベントを関連付けるためにWindowのインスタンスを使用しているためです。たとえば、すべてのイベントを関連付ける必要があります。この場合、に関連付けられたすべてのイベントのみがウィンドウ関数に渡され、まとめて処理されます (この例では、、 などによってグループ化されたイベントのカウントが計算されます) 。aWindow(b)baWindow(a)aWindow(a)abGlobalWindow

4

1 に答える 1

2

WindowFlink がインスタンスを使用して、同じウィンドウに属する要素をグループ化するのは正しいことです。ただし、以前でも、入力ストリームは指定されたキーに従ってグループ化されます。そのため、内部的に Flink はキーごとにウィンドウとそれに関連する要素のリストを保存します。これにより、複数のキーで同じウィンドウ インスタンスを使用できます。

より正確に言うと、内部には、との要素Map<Window, Map<Key, List<Element>>のすべてのペアを格納するネストされた があります。WindowKeyList

このアプローチの利点は、キー付きストリームと非キー付きストリームでのウィンドウ処理ロジックの実装に違いがないことです。後者の場合、キーをダミーの値に設定するだけです。

于 2016-03-30T10:04:46.623 に答える