以下讨论在 Apache Flink :
的背景下进行想象一下,我们有keyedStream
,其关键字是id
,事件时间是时间戳,如果我们想要计算每个事件在10分钟内到达的事件数事件
需要解决的问题是:
也许我在这里没有提到一些问题,或者除了窗口(即模式)之外还有一些好的解决方案。如果你有一个很好的解决方案,请给我一个线索,谢谢。
答案 0 :(得分:0)
您可以使用GlobalWindow和Trigger执行此操作,而不是触发每个事件和Evictor,以便在计算剩余事件之前删除超过10分钟的事件。 (然而,一个天真的实现很容易表现得很差。)
是的,这可能需要保持很多状态 - 您将保留过去10分钟内的每个事件(嗯,您只需要存储每个事件的时间戳)。如果你设置RocksDB状态后端,那么如果需要,Flink将溢出到磁盘,但是会有一些明显的性能损失。可能更好地使用足够大的集群来在内存中保持10分钟的流量。即使每秒有一百万个事件,每个事件都有一个32位时间戳,在10分钟内只有2.4GB(每秒100万个事件x 600秒x每个事件4个字节) - 似乎没有就像一个问题。