Flink keyBy:键太多?

Flink keyBy: too many keys?

首先,这是我的代码逻辑

source.keby(key)
.window(1d)
.process(computeLogic)
.sink(sinkFunction)

我的问题是:

如果我的钥匙太多,比方说超过 10,000 个钥匙,每个钥匙会有一个 window 吗?会不会Windows太多太占内存导致OOM?

will there be one window for each key?

视情况而定。您可以定义自己的 Window,每个 window 实现一个键。对于预定义的 window,如 Tumbling Window,每个键将有多个 windows。例如。对于允许延迟的 5 秒翻滚事件 Window,同一个键会有多个 windows。

Does too many Windows take up too much memory and cause OOM ?

如果key比较多,可以给Flink job增加并行度,这样每个task处理的key就少了。

在task上有很多windows的情况下,如果使用Heap State(基于内存的状态),则可能会导致OOM。对于像 RocksDB 状态后端这样的状态后端,那么它应该没问题,因为状态将被刷新到磁盘。

更多详情可以参考:https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/operators/windows.html