我目前正在使用Flink 1.0编写一个聚合用例,作为我需要获取过去10分钟内登录的api的计数的用例的一部分。
我可以很容易地使用keyBy("api"),然后应用10分钟的窗口和做和(计数)操作。
但问题是我的数据可能会乱序,所以我需要一些方法来获得10分钟窗口内的api计数。
例如:如果相同的api日志出现在两个不同的窗口中,我应该为它获得一个全局计数,即2,而不是两个单独的记录,每个窗口显示计数为1。
我也不想要增量计数,也就是说,具有相同键的每条记录都被多次显示,count等于增量值。
我希望记录以全局计数显示一次,类似于Spark中的updateStateByKey()。
我们能做到吗?
发布于 2016-04-07 18:27:57
您应该看看Flink的event-time feature,它可以为乱序流生成一致的结果。Event-time意味着Flink将根据作为事件一部分的时间戳处理数据,而不是依赖于机器的挂钟时间。
如果您使用事件时间(带有适当的水印)。Flink将使用自动处理无序到达的事件。
https://stackoverflow.com/questions/36467171
复制相似问题