Uploaded image for project: 'Flink'
  1. Flink
  2. FLINK-5929

Allow Access to Per-Window State in ProcessWindowFunction

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 1.3.0
    • API / DataStream
    • None

    Description

      Right now, the state that a WindowFunction or ProcessWindowFunction can access is scoped to the key of the window but not the window itself. That is, state is global across all windows for a given key.

      For some use cases it is beneficial to keep state scoped to a window. For example, if you expect to have several Trigger firings (due to early and late firings) a user can keep state per window to keep some information between those firings.

      The per-window state has to be cleaned up in some way. For this I see two options:

      • Keep track of all state that a user uses and clean up when we reach the window GC horizon.
      • Add a method cleanup() to ProcessWindowFunction which is called when we reach the window GC horizon that users can/should use to clean up their state.

      On the API side, we can add a method windowState() on ProcessWindowFunction.Context that retrieves the per-window state and globalState() that would allow access to the (already available) global state. The Context would then look like this:

      /**
       * The context holding window metadata
       */
      public abstract class Context {
          /**
           * @return The window that is being evaluated.
           */
          public abstract W window();
      
          /**
           * State accessor for per-key and per-window state.
           */
          KeyedStateStore windowState();
      
          /**
           * State accessor for per-key global state.
           */
          KeyedStateStore globalState();
      }
      

      Attachments

        Activity

          People

            sjwiesman Seth Wiesman
            aljoscha Aljoscha Krettek
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: