问题描述
由于我将RocksDB用作Flink作业的状态后端,并且正在配置此状态后端的参数,因此我在Flink的这一页中了解到,我有两个选择来保留计时器( (rocksDB或heap),而我已阅读了说明,但仍然缺少这部分的含义:
“但是,在RocksDB中维护计时器可能会花费一定的费用,这就是为什么Flink提供了将计时器存储在JVM堆上的选项,即使使用RocksDB存储其他状态也是如此。基于堆的计时器可能会有更好的选择计时器数量较少时的性能。”
- 他们在这里提到的这笔费用是多少(等待时间)?
- 什么意思是更少的计时器(可以用某种方式来衡量,这可能是堆中允许的最大计时器数)?
解决方法
基于堆的计时器可以以更少的延迟进行访问。我听过的基准测试仅提到了适度的改进(加快了5-10%)。但是,将计时器保留在堆上会增加垃圾回收所涉及的对象数量,因此这也会损害整体性能(例如,最坏情况下的延迟)。
我认为您必须进行自己的基准测试,以确保哪种情况最适合您,但我不会期望任何一种方式都会产生巨大的影响。