【发布时间】:2019-04-04 12:20:20
【问题描述】:
在处理过程中添加一些托管状态后,尽管使用 RocksDb 的增量检查点,但我们发现检查点的大小和持续时间令人担忧地增长。
为了隔离问题,我们使用源、地图运算符和接收器创建了简单的拓扑。
源在内存中以每秒 1 个事件的吞吐量创建任意数量的事件。每个事件都有唯一的 id,用于分区流(使用 keyBy 运算符)并通过 map 函数,该函数将大约 100kB 增加到托管状态(使用 ValueState)。然后将事件简单地传递给什么都不做的接收器。
使用上述设置,我们发送了 1200 个事件,检查点间隔和最小暂停设置为 5 秒。由于事件以恒定的速度和等量的状态出现,我们预计检查点的大小或多或少是恒定的。然而,我们观察到检查点大小的峰值呈线性增长(最后一个峰值几乎为 120MB,接近整个预期托管状态的大小),中间有小检查点。对于监控,我们使用了 Flink 和 Prometheus 与 Grafana 公开的指标,请参阅: checkpoint charts
我们想了解为什么我们会观察到 CP 峰值以及为什么它们会不断增长?
是什么原因导致一些 CP 节省了预期的大小(大约 500kB),而一些 CP 的大小却在整个当前托管状态大小附近,即使负载是恒定的?
使用增量检查点时,lastCheckpointSize 指标究竟测量了什么?
任何提示,解释将不胜感激,
提前致谢。
【问题讨论】:
标签: apache-flink