Yes, exactly. The idea would be, that you operate in event time, but combine it with processing time timers to trigger timeout detection. Could that help for your case?
> Am 23.06.2017 um 10:55 schrieb Álvaro Vilaplana García > <alvaro.vilapl...@gmail.com>: > > Hi Stefan, > > You meant > > /** > * Registers a timer to be fired when processing time passes the given time. > * > * <p>Timers can internally be scoped to keys and/or windows. When you set a > timer > * in a keyed context, such as in an operation on > * {@link org.apache.flink.streaming.api.datastream.KeyedStream} then that > context > * will also be active when you receive the timer notification. > */ > void registerProcessingTimeTimer(long time); > > Am i right? > > Cheers > > 2017-06-23 9:51 GMT+01:00 Álvaro Vilaplana García <alvaro.vilapl...@gmail.com > <mailto:alvaro.vilapl...@gmail.com>>: > Hi Stefan, > > Thank you for your knowledge, very appreciated. > > According with the documentation: > > void registerEventTimeTimer(long time); -> 'Registers a timer to be fired > when the event time watermark passes the given time.' > > Dont we have the same problem? We would need an event (that event does not > come soon) to set the watermark and trigger the timer. > > Or there is another way of setting the watermark based on the processing time > instead of the event time? > > Cheers > > 2017-06-23 9:24 GMT+01:00 Stefan Richter <s.rich...@data-artisans.com > <mailto:s.rich...@data-artisans.com>>: > Hi, > > yes, I think you understood the basic concept of watermarks. Events are > basically driving „the event time clock“, so it can only advance when you see > events. I am not sure if I got the part about partitions correctly, but the > watermark event time is a global thing. For example, if you have multiple > Kafka partitions that your source reads, each partition can have a different > current watermark. However, the source must determine the current event time > of the stream, e.g. as the minimum of the watermarks from all the Kafka > partition it reads. > > One thing that might help for your use case is a combination of event time > and processing time. In the processing function, after each device event, you > could register a timer so far ahead in processing time that it can serve as a > signal to check for time outs because you did not receive events in a long > time. > > Best, > Stefan > >> Am 23.06.2017 um 09:51 schrieb Álvaro Vilaplana García >> <alvaro.vilapl...@gmail.com <mailto:alvaro.vilapl...@gmail.com>>: >> >> Hi Stefan, >> >> Thank you so much for your answer. >> >> Regarding the 'artificial events', our main problem is that we have no >> control at all in the devices. >> >> I have been reading more about event time and watermarks and what I >> understood is that when we use event times (device times) Flink does not >> know anything about notion of time and the watermark is a way to help Flink >> to set the time of the stream (no more events with event time earlier than >> the watermark). That would explain that we need always an event to set the >> watermark. Does it make sense? >> >> >> I understood that the watermarks will be per partition (ByKey(deviceId)), is >> that right? >> >> >> Cheers >> >> 2017-06-22 16:26 GMT+01:00 Stefan Richter <s.rich...@data-artisans.com >> <mailto:s.rich...@data-artisans.com>>: >> Hi, >> >> if I understand correctly, your problem is that event time does not progress >> in case you don’t receive events, so you cannot detect the timeout of >> devices. Would it make sense to have you source periodically send artificial >> events to advance the watermark in the absence of device events, with a >> certain gap for which you can safely assume that you will no longer receive >> events with a smaller timestamp from any device in the future? Because, how >> else could Flink advance event time without receiving further events? >> >> Best, >> Stefan >> >> > Am 22.06.2017 um 16:35 schrieb Álvaro Vilaplana García >> > <alvaro.vilapl...@gmail.com <mailto:alvaro.vilapl...@gmail.com>>: >> > >> > Hi, >> > >> > Please, can you help me with a problem? I summarise in the next points, I >> > hope is enough clear to approach some help. >> > >> > >> > a) We have devices, each with its own ID, which we don’t have control of >> > >> > b) These devices send messages, with an internally generated, non-synced >> > (amongst other devices) timestamp >> > >> > c) We want to detect when each devices may stop sending messages >> > >> > d) For that, we are using a ProcessFunction >> > >> > e) The devices put the messages in a Kafka topic, partitioned by ID. >> > >> > f) We are struggling with the ProcessFunction timeout feature: >> > >> > We cannot rely on real time (processing time), since the messages from the >> > devices may be delayed (even if their timestamp does not show these >> > delays) - so we rely on device timestamps instead. >> > In our case an event comes in which: "Registers a timer to be fired when >> > the event time watermark passes the given time". The problem we have is >> > there are cases where we do not get an additional event after the first >> > event- which means that the original event timeouts are not triggered. >> > >> > As a side note we've seen in unit tests that flink seems to set a >> > watermark after the last event with a Long.MaxValue (9223372036854775807) >> > - which hides the above problem. >> > >> > I am using Scala 2.11 /Flink versions 1.2.0 >> > >> > Regards >> > -- >> > ______________________________ >> > >> > Álvaro Vilaplana García >> >> >> >> >> -- >> ______________________________ >> >> Álvaro Vilaplana García > > > > > -- > ______________________________ > > Álvaro Vilaplana García > > > > -- > ______________________________ > > Álvaro Vilaplana García