我们正在运行一个Flink集群来计算历史to级的流数据。数据计算有一个巨大的状态,我们使用键控状态-值和映射状态与RocksDb后端。在作业计算的某个时刻,作业绩效开始下降,投入和产出率下降到几乎为0。在这一点上,可以在日志中看到像'Communication with Taskmanager X timeout error‘这样的异常,但是作业甚至在此之前就已经被破坏了。
我认为我们面临的问题与RocksDb的磁盘后端有关。随着作业状态的增长,它需要更频繁地访问磁盘,这会将性能拖到0。我们已经尝试了一些选项,并设置了一些对我们的特定设置有意义的选项:
我们使用的是SPINNING_DISK_OPTIMIZED_HIGH_MEM预定义配置文件,通过optimizeFiltersForHits和其他一些选项进一步优化,性能有所提高。然而,这并不能提供稳定的计算,并且在针对更大的数据集重新运行作业时,作业再次暂停。
我们正在寻找的是一种修改作业的方法,使其即使在输入和状态增加时也能以一定的速度进行。我们在AWS上运行,任务管理器的限制设置为15 GB左右,并且没有磁盘空间限制。
发布于 2019-09-12 14:27:31
使用SPINNING_DISK_OPTIMIZED_HIGH_MEM将消耗大量的堆外内存,内存限制在15 if左右,我认为你会遇到OOM问题,但如果你选择默认的预定义配置文件,你将面临写延迟问题或解压RocksDB的页面缓存的CPU开销,所以我认为你应该增加内存限制。这里有一些关于Rocksdb的帖子供你参考:https://github.com/facebook/rocksdb/wiki/Memory-usage-in-RocksDB https://www.ververica.com/blog/manage-rocksdb-memory-size-apache-flink
https://stackoverflow.com/questions/57654606
复制相似问题