我正在努力理解Flink触发器是如何 job 的。我的数据流包含具有基于该sessionId聚合的sessionId的事件。每个会话都将包含一个已开始和一个结束事件,但是有时结束的事件将丢失。
为了处理这个问题,我设置了一个触发器,它将在处理结束事件时发出聚合会话。但是,如果2分钟内没有事件从该会话到达,我想发出我们迄今为止聚合的任何内容(我们发送事件的应用程序每分钟发送一次心跳,因此如果我们没有收到任何事件,则认为会话丢失)。
我设置了以下触发器函数:
public class EventTimeProcessingTimeTrigger extends Trigger {
private final long sessionTimeout;
private long lastSetTimer;
// Max session length set to 1 day
public static final long MAX_SESSION_LENGTH = 1000l * 86400l;
// End session events
private static ImmutableSet<String> endSession = ImmutableSet.<String>builder()
.add("Playback.Aborted")
.add("Playback.Completed")
.add("Playback.Error")
.add("Playback.StartAirplay")
.add("Playback.StartCasting")
.build();