以下讨论是在Apache Flink的上下文中进行的:
想象一下,如果我们要计算每个事件在 10 分钟内keyedStream
到达的事件数量,假设我们有一个其键是它的键,事件时间是它的时间戳。id
需要解决的问题是:
- 如何设计窗户?
- 我们可以在每个事件到达后创建一个 10 分钟的窗口,但这意味着对于每个事件,都会有 10 分钟的延迟,因为等待 10 分钟的窗口。
- 我们可以创建一个 10 分钟的窗口,将每个事件的时间戳作为这个窗口的最大时间戳,也就是说我们不需要等待 10 分钟,因为我们取的是元素到达前最后 10 分钟的元素. 但据我所知,这种窗口并不容易定义。
- 如何处理内存或其他资源问题?即使我们成功创建了一个窗口,可能事件的id类型是多种多样的,这么多窗口,系统如何将它们的状态保存在内存中?内存溢出的可能性很大。
可能有一些问题我在这里没有提到,或者除了window(即Patterns)之外还有一些好的解决方案。如果你有好的解决方法,请给我一个线索,谢谢。