计时器堆与RocksDB

问题描述

由于我将RocksDB用作Flink作业的状态后端,并且正在配置此状态后端的参数,因此我在Flink的这一页中了解到,我有两个选择来保留计时器( (rocksDB或heap),而我已阅读了说明,但仍然缺少这部分的含义:

“但是,在RocksDB中维护计时器可能会花费一定的费用,这就是为什么Flink提供了将计时器存储在JVM堆上的选项,即使使用RocksDB存储其他状态也是如此。基于堆的计时器可能会有更好的选择计时器数量较少时的性能。”

  1. 他们在这里提到的这笔费用是多少(等待时间)?
  2. 什么意思是更少的计时器(可以用某种方式来衡量,这可能是堆中允许的最大计时器数)?

解决方法

基于堆的计时器可以以更少的延迟进行访问。我听过的基准测试仅提到了适度的改进(加快了5-10%)。但是,将计时器保留在堆上会增加垃圾回收所涉及的对象数量,因此这也会损害整体性能(例如,最坏情况下的延迟)。

我认为您必须进行自己的基准测试,以确保哪种情况最适合您,但我不会期望任何一种方式都会产生巨大的影响。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...