You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "Aljoscha Krettek (JIRA)" <ji...@apache.org> on 2016/09/27 09:11:21 UTC
[jira] [Commented] (FLINK-3674) Add an interface for Time aware
User Functions
[ https://issues.apache.org/jira/browse/FLINK-3674?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15525561#comment-15525561 ]
Aljoscha Krettek commented on FLINK-3674:
-----------------------------------------
I want to implement this using two new interfaces:
- {{TimelyFunction}}, this would be implemented by a user function that needs to deal with timers/time
- {{TimerService}}, this allows so set processing-time/event-time timers and query the current time
{code}
/**
* Interface for user functions that allows them to deal with time.
*
* <p>{@link #setTimerService(TimerService)} is called by the system to provide the function
* with a {@link TimerService} that can be used to query the current time and set timers.
*
* <p>{@link #onTimer(long, TimeDomain)} is called when timers fire.
*/
@PublicEvolving
public interface TimelyFunction {
/**
* Provides a {@link TimerService} to the function.
*/
void setTimerService(TimerService timerService);
/**
* Called when a timer set using {@link TimerService} fires.
*/
void onTimer(long timestamp, TimeDomain timeDomain);
}
/**
* Interface for working with time and timers.
*/
@PublicEvolving
public interface TimerService {
/** Returns the current processing time. */
long currentProcessingTime();
/** Returns the current event time. */
long currentEventTime();
/**
* 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);
/**
* Deletes the given timer in the current key/window scope.
*/
void deleteProcessingTimeTimer(long time);
/**
* Registers a timer to be fired when the event time watermark 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 registerEventTimeTimer(long time);
/**
* Deletes the given timer in the current key/window scope.
*/
void deleteEventTimeTimer(long time);
}
{code}
I put in the delete methods for now but they will probably go away in the final implementation because deletes cannot be done in an efficient way.
> Add an interface for Time aware User Functions
> ----------------------------------------------
>
> Key: FLINK-3674
> URL: https://issues.apache.org/jira/browse/FLINK-3674
> Project: Flink
> Issue Type: New Feature
> Components: Streaming
> Affects Versions: 1.0.0
> Reporter: Stephan Ewen
> Assignee: Aljoscha Krettek
>
> I suggest to add an interface that UDFs can implement, which will let them be notified upon watermark updates.
> Example usage:
> {code}
> public interface EventTimeFunction {
> void onWatermark(Watermark watermark);
> }
> public class MyMapper implements MapFunction<String, String>, EventTimeFunction {
> private long currentEventTime = Long.MIN_VALUE;
> public String map(String value) {
> return value + " @ " + currentEventTime;
> }
> public void onWatermark(Watermark watermark) {
> currentEventTime = watermark.getTimestamp();
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)