hi,
we have a similar use case,  and from my experience it is not simple (if at
all) to implement your logic when using a session window.
Eventually we used the state + timers approach and we have full  control of
the cleanup and merge logic.

Thanks
Sigalit

On Mon, May 12, 2025 at 1:35 PM Sachin Mittal <sjmit...@gmail.com> wrote:

> Second approach is good to try out.
> I am also solving for a similar problem using this approach only.
>
> Thanks
> Sachin
>
>
> On Mon, 12 May 2025 at 3:52 PM, Ehud Lev <ehud....@forter.com> wrote:
>
>> Hi Flink community,
>>
>> We're building a Flink topology that aggregates events by key. When a key
>> is seen for the first time, we load its base state from an external store.
>> After performing some calculations, we emit the result to Kafka, and
>> another process is responsible for writing it back to the store.
>>
>> Our goals are:
>>
>>    1.
>>
>>    *Keep per-key state alive for a few hours*, but *remove it if no new
>>    events arrive during that time*.
>>    2.
>>
>>    *Suppress frequent updates* and *emit output only every 5 seconds*,
>>    but *only if updates occurred* during that interval.
>>
>> I see two possible implementation strategies:
>>
>>    1.
>>
>>    *Session Windows (processing time):*
>>    This would allow automatic state cleanup based on inactivity, but I'm
>>    concerned about *merging session states*, since our logic depends on
>>    having a well-defined "base state" and applying updates to it. I can not
>>    handle merge basically.
>>    2.
>>
>>    *KeyedProcessFunction with timers:*
>>    In this approach, we’d maintain keyed state, and use:
>>    -
>>
>>       A *5-second periodic timer* to check for and emit updates (if any).
>>       -
>>
>>       That same timer can also track *last-seen timestamps* to expire
>>       state after a few idle hours.
>>
>> *My questions:*
>> Is the session window approach even suitable here, given the merging
>> issue I have?
>> Is the KeyedProcessFunction with a "single recurring timer" a
>> recommended pattern in such use cases?
>> Are there any caveats or better alternatives for managing "suppressed +
>> expiring" keyed state?
>>
>>
>> Thanks in advance!
>>
>> --
>> Ehud Lev, Staff Engineer
>> email: ehud....@forter.com  web: www.forter.com
>> mobile: 052-5832253
>>
>

Reply via email to