如何使Flink工作达到巨大的状态

时间:2019-08-26 08:48:14

标签: apache-flink

我们正在运行Flink群集,以计算历史级的TB级流数据。数据计算具有巨大的状态,为此我们使用键状态-带有RocksDb后端的值和映射状态。在作业计算的某个时刻,作业性能开始下降,输入和输出速率几乎降为0。这时,在日志中可以看到诸如“与Taskmanager X超时错误通信”之类的异常,但是该作业甚至在以前就受到了损害。

我认为RocksDb的磁盘后端存在我们所面临的问题。随着工作状态的增长,它需要更频繁地访问磁盘,从而将性能降低到0。我们已经使用了一些选项,并设置了一些对于我们的特定设置有意义的选项:

我们正在使用SPINNING_DISK_OPTIMIZED_HIGH_MEM预定义的配置文件,并通过optimizeFiltersForHits和一些其他选项进行了进一步优化,这些选项在某种程度上提高了性能。但是,这不能提供稳定的计算,并且在针对较大数据集重新运行作业时,作业将再次暂停。

我们正在寻找一种修改作业的方法,即使输入和状态增加,作业也可以以某种速度进行。我们在AWS上运行,任务管理器的限制设置为15 GB左右,磁盘空间没有限制。

1 个答案:

答案 0 :(得分:0)

通过RocksDB的内存表使用SPINNING_DISK_OPTIMIZED_HIGH_MEM将花费大量的堆外内存,因为您正在运行的内存限制约为15GB,我认为您会遇到OOM问题,但是如果选择默认的预定义配置文件,您将面临解压缩Rocksdb的页面缓存会导致写入停顿问题或CPU开销,因此我认为您应该增加内存限制。 以下是有关Rocksdb FYI的一些帖子: https://github.com/facebook/rocksdb/wiki/Memory-usage-in-RocksDB https://www.ververica.com/blog/manage-rocksdb-memory-size-apache-flink