首页 > 解决方案 > 计时器(堆与 RocksDB)

问题描述

因为我使用 RocksDB 作为我的 Flink 作业的状态后端并且我正在配置这个状态后端的参数,所以我在Flink的这个页面中读到我有两个选项来保留我的计时器(rocksDB 或堆),我已阅读说明,但仍然缺少这部分的含义:

“然而,在 RocksDB 中维护定时器可能会产生一定的成本,这就是为什么 Flink 提供了将定时器存储在 JVM 堆上的选项,即使 RocksDB 用于存储其他状态。基于堆的定时器在这种情况下可以有更好的性能是较少数量的计时器。”

  1. 他们在这里提到的成本是多少(延迟)?
  2. 什么意味着更少的定时器(可以以某种方式测量这个数字,堆中允许的最大定时器数量是多少)?

标签: apache-flinkflink-streamingrocksdbflink-cep

解决方案


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

我认为您必须进行自己的基准测试才能确定在您的情况下什么是最好的,但我不希望以这种或另一种方式产生任何戏剧性的影响。


推荐阅读