在Apache Flink中使用State是否有限制?

时间:2019-01-16 15:26:58

标签: apache-flink

Apache Flink允许我在RichMapFunction中使用State。我正计划建立一个持续运行的工作,以分析一系列网络事件。处理的一部分将是创建具有会话范围度量(例如会话的n个,持续时间等)以及用户上下文的会话上下文。

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

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

  • 这可以通过Flink状态正确处理吗?
  • Flink实际如何清除不赞成使用的状态?
  • 考虑提供自定义后端以将状态存储在KV集群中是否有意义?

1 个答案:

答案 0 :(得分:2)

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

目前,您需要注册计时器以清理状态。但是,在下一个Flink版本中,社区将添加clean up for state with TTL。然后,它将在状态过期时自动清除状态。

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