我刚开始使用Flink,但有一个不确定的问题,我不确定如何解决。我从Kafka主题获取事件,这些事件表示来自移动设备的“信标”信号。设备每10秒发送一次事件。
我有一个外部客户,但每60秒要从我们的设备中请求一个信标。由于我们已经在使用Flink来处理其他事件,所以我认为我可以使用计数窗口来解决此问题,但是我在努力了解如何“舍弃”前5个事件并仅发出最后一个事件。有什么想法吗?
答案 0 :(得分:1)
有一些方法可以做到这一点。据我所知,这个想法如下:您每隔10秒就会收到一个信标信号,但实际上您只需要最实际的一个,而对另一个却不屑一顾,因为客户端每60秒就会请求一次数据。
如您所说,最简单的方法是在计数/事件时间窗口中使用ProcessFunction
。窗口的类型实际上取决于您的要求。然后,您可以执行以下操作:
stream.timeWindow([windowSize]).process(new CustomWindowProcessFunction())
process()
的{{1}}方法的签名如下,具体取决于实际函数ProcessWindowFunction
的类型。因此,基本上,它可以为您提供所有窗口元素的访问权限,因此您可以轻松地仅将自己喜欢的元素进一步推入。
虽然这是最简单的主意,但您可能还希望看看Flink计时器,因为它们似乎是解决您的问题的好方法。它们被描述为here。