首页 > 解决方案 > 在 Apache Flink 中使用 State 有限制吗?

问题描述

Apache Flink 允许我在 RichMapFunction 中使用状态。我计划构建一个持续运行的作业来分析网络事件流。部分处理将是创建具有会话范围指标(如第 n 个会话、持续时间等)的会话上下文以及另外一个用户上下文。

会话上下文将在 30 分钟后超时,但用户上下文可能存在一年来处理返回用户。

将有数百万个会话和用户,所以我最终会进入数百万个州。每个状态的大小只有几 KB。

标签: apache-flink

解决方案


对于大型状态,我建议使用 Flink 的RocksDBStateBackend. 这个状态后端使用 RocksDB 来存储状态。由于 RocksDB 优雅地溢出到磁盘,它仅受可用磁盘空间的限制。因此,Flink 应该能够处理您的用例。

目前你需要注册定时器来清理状态。但是,在下一个 Flink 版本中,社区将使用 TTL 添加清理状态。这将在过期时自动清理您的状态。

使用持久的定期检查点使您的状态接近您的计算,这将使您的应用程序保持快速。如果每个状态访问都转到远程 KV 集群,则会大大减慢处理速度。


推荐阅读