Thanks for the clarification Dawid. Resolves my confusion.
Sent from Yahoo Mail on Android 
 
  On Fri, 19 Mar 2021 at 2:41 pm, Dawid Wysakowicz<dwysakow...@apache.org> 
wrote:    
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    

Reply via email to