Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flink 每X分钟发送一次会话窗口的结果_Apache Flink - Fatal编程技术网

Apache flink 每X分钟发送一次会话窗口的结果

Apache flink 每X分钟发送一次会话窗口的结果,apache-flink,Apache Flink,我实现了一个Flink处理器,它将事件聚合到会话中,然后将它们写入接收器。现在我想扩展它,这样我就可以每五分钟获得并发会话的数量 进入我的系统的事件如下表所示: { "SessionId": "UniqueUUID", "Customer": "CustomerA", "EventType": "EventTypeA", [ ... ] } 单个会话通常包含多

我实现了一个Flink处理器,它将事件聚合到会话中,然后将它们写入接收器。现在我想扩展它,这样我就可以每五分钟获得并发会话的数量

进入我的系统的事件如下表所示:

{
  "SessionId": "UniqueUUID",
  "Customer": "CustomerA",
  "EventType": "EventTypeA",
  [ ... ]
}
单个会话通常包含多个不同事件类型的事件。然后,我通过在Flink中执行以下操作将事件聚合到会话中

DataStream<Session> sessions = events
                .keyBy((KeySelector<HashMap, String>) event -> (String) event.get(Field.SESSION_ID))
                .window(ProcessingTimeSessionWindows.withGap(org.apache.flink.streaming.api.windowing.time.Time.minutes(5)))
                .trigger(SessionProcessingTimeTrigger.create())
                .aggregate(new SessionAggregator())
DataStream会话=事件
.keyBy((KeySelector)事件->(字符串)事件.get(Field.SESSION_ID))
.window(ProcessingTimeSessionWindows.withGap(org.apache.flink.streaming.api.windowing.time.time.minutes(5)))
.trigger(SessionProcessingTimeTrigger.create())
.aggregate(新SessionAggregator())
当处理具有特定EventType的事件(“EventType”:“session.Ended”)时,每个会话都是由SessionProcessingTimeRigger发出的。最后,该流被发送到一个接收器并写入卡夫卡

现在,我想编写一个类似的Flink处理器,但不是在它完成后才发出会话,而是希望每5分钟发出所有会话,以便跟踪每5分钟有多少并发会话。 所以从某种意义上说,我想我想要的是一个SessionWindow,它也会定期发送它的内容,而不会清除内容


我对如何在Flink中实现这一点感到困惑,因此正在寻找一些帮助。

每当您希望Flink窗口在非默认时间发出结果时,您可以通过实现自定义触发器来实现这一点。除了最初的逻辑之外,每次5分钟长的定时器触发时,您只需返回触发。当第一个事件分配给窗口时,以及每次计时器触发时,您都需要注册此计时器


在会话窗口的情况下,由于会话窗口的合并方式,这可能更加复杂。但我相信,在处理时间会话窗口的情况下,我上面概述的方法会起作用。

我会尝试删除
触发器
函数,并在
聚合
函数之后添加另一个5分钟的窗口。