apache-flink - 在 Apache Flink 中使用 State 有限制吗?
问题描述
Apache Flink 允许我在 RichMapFunction 中使用状态。我计划构建一个持续运行的作业来分析网络事件流。部分处理将是创建具有会话范围指标(如第 n 个会话、持续时间等)的会话上下文以及另外一个用户上下文。
会话上下文将在 30 分钟后超时,但用户上下文可能存在一年来处理返回用户。
将有数百万个会话和用户,所以我最终会进入数百万个州。每个状态的大小只有几 KB。
- 这是否可以通过 Flink 状态正确处理?
- Flink 实际上是如何清理弃用状态的?
- 考虑提供一个自定义后端来将状态存储在 KV 集群中是否有意义?
解决方案
对于大型状态,我建议使用 Flink 的RocksDBStateBackend
. 这个状态后端使用 RocksDB 来存储状态。由于 RocksDB 优雅地溢出到磁盘,它仅受可用磁盘空间的限制。因此,Flink 应该能够处理您的用例。
目前你需要注册定时器来清理状态。但是,在下一个 Flink 版本中,社区将使用 TTL 添加清理状态。这将在过期时自动清理您的状态。
使用持久的定期检查点使您的状态接近您的计算,这将使您的应用程序保持快速。如果每个状态访问都转到远程 KV 集群,则会大大减慢处理速度。
推荐阅读
- php - 调整交钥匙 PHP 表单以在与表单相同的页面上显示错误消息
- selenium-webdriver - 哪个测试运行器最适合运行 webdriverjs 测试套件
- opencv - 带噪声的特征匹配
- regex - 正则表达式否定回溯到行中的任何位置
- python-3.x - mlflow 运行 git-uri 克隆到特定目录
- javascript - 在对象内调用 JavaScript 函数
- flutter - 错误:遵循 audio_service 教程时,没有为“MediaControl”类型定义获取器“暂停/停止/播放”
- html - 如何在检查元素中查看 HTML 路径文件?
- reactjs - 使用 React-table 根据元数据过滤行
- python - 使用任何 python 库从宏 excel 调用中获取单元格值到另一个工作表