Apache Flink允许我在RichMapFunction中使用State。我正计划建立一个持续运行的工作,以分析一系列网络事件。处理的一部分将是创建具有会话范围度量(例如会话的n个,持续时间等)以及用户上下文的会话上下文。
会话上下文将在30分钟后超时,但是用户上下文可能存在一年以处理回访用户。
将有数以百万计的会话和用户,因此我最终将进入数百万个州。每个状态只有几KB大小。
答案 0 :(得分:2)
对于大状态,我建议使用Flink的RocksDBStateBackend
。该状态后端使用RocksDB存储状态。由于RocksDB正常地溢出到磁盘上,因此它仅受可用磁盘空间的限制。因此,Flink应该能够处理您的用例。
目前,您需要注册计时器以清理状态。但是,在下一个Flink版本中,社区将添加clean up for state with TTL。然后,它将在状态过期时自动清除状态。
通过持续存在的定期检查点使您的状态接近计算,这将使您的应用程序保持快速运行。如果每个状态访问都转到远程KV群集,则将大大减慢处理速度。