Hi Chirag,

I agree it might be a little bit confusing.

Let me try to explain the reasoning. To do that I'll first try to
rephrase the reasoning from FLINK-8560 for introducing the
KeyedProcessFunction. It was introduced so that users have a typed
access to the current key via Context and OnTimerContext. This is
actually the only difference between the two function.

Somewhat as a consequence of the above, the KeyedProcessFunction can be
used solely on a keyed stream, however ProcessFunction can be used in
both. That was actually the only way to use a ProcessFunction on a keyed
stream prior to introducing the KeyedProcessFunction. If you don't need
access to the current key you should be fine with using the
ProcessFunction on a keyed stream and there you can use the
TimerService. It is advised to use a KeyedProcessFunction on a keyed
stream, however for backwards compatibility the old behaviour has been kept.

Hope that it clarifies the things a bit.

Best,

Dawid

On 17/03/2021 07:47, Chirag Dewan wrote:
> Hi,
>
> Currently, both ProcessFunction and KeyedProcessFunction (and their
> CoProcess counterparts) expose the Context and TimerService in the
> processElement() method. However, if we use the TimerService in non
> keyed context, it gives a runtime error. 
>
> I am a bit confused about these APIs. Is there any specific reason for
> exposing TimerService in non-keyed context especially if it cant be
> used without keyed stream?
>
> Any leads are much appreciated.
>
> Thanks,
> Chirag

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to