Re: 答复: flink使用RocksDB增量checkpoints,程序运行一段时间报出:超出物理内存

2020-12-07 文章 bradyMk
这面还想多请教一下:

我程序中每来一条数据都会去读MapState然后覆盖写入新的时间戳,刚刚发现某一条数据读出了两条一样的时间戳,我推断是第一个线程读出来后还没等覆盖掉,第二个线程又读了一遍,导致出现两条一样的时间戳;

所以想请问flink中MapState是线程安全的吗?



-
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/

Re: 答复: flink使用RocksDB增量checkpoints,程序运行一段时间报出:超出物理内存

2020-12-07 文章 bradyMk
好的~谢谢大佬解答~



-
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/


Re: 答复: flink使用RocksDB增量checkpoints,程序运行一段时间报出:超出物理内存

2020-12-07 文章 Yun Tang
配置一下 RocksDB 的native metrics,看下block cache以及 write buffer的实际使用内存。
另外,Flink中一个state会使用一个RocksDB的column family,而write buffer和block cache是一套column 
family 一套,所以你的operator 内的state数目多,slot内的keyed operator多,都会导致内存成倍增长


[1] 
https://ci.apache.org/projects/flink/flink-docs-release-1.11/ops/config.html#rocksdb-native-metrics

祝好
唐云

From: bradyMk 
Sent: Monday, December 7, 2020 17:05
To: user-zh@flink.apache.org 
Subject: Re: 答复: flink使用RocksDB增量checkpoints,程序运行一段时间报出:超出物理内存

Hi~

可是我这边write buffer以及block cache等参数设置的都不大,都远远小于我分给tm的内存,可为什么还会报超出内存的错误呢?



-
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/


Re: 答复: flink使用RocksDB增量checkpoints,程序运行一段时间报出:超出物理内存

2020-12-07 文章 bradyMk
Hi~

可是我这边write buffer以及block cache等参数设置的都不大,都远远小于我分给tm的内存,可为什么还会报超出内存的错误呢?



-
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/

Re: 答复: flink使用RocksDB增量checkpoints,程序运行一段时间报出:超出物理内存

2020-12-07 文章 Yun Tang
RocksDB只是将数据可以存储在磁盘上,Flink再周期性将磁盘上数据上传到HDFS,内存中还是有LSM的write buffer以及block 
cache,也还是需要使用内存的

建议升级Flink版本到1.10+,引入了managed memory功能,理论上对于内存控制是要好很多的。


祝好
唐云

From: bradyMk 
Sent: Monday, December 7, 2020 11:27
To: user-zh@flink.apache.org 
Subject: Re: 答复: flink使用RocksDB增量checkpoints,程序运行一段时间报出:超出物理内存

hi~谢谢解答;

但我的状态用的是RocksDB,实质上不应该是存的磁盘么?为什么会一直占用tm的内存呢?



-
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/


Re: 答复: flink使用RocksDB增量checkpoints,程序运行一段时间报出:超出物理内存

2020-12-06 文章 bradyMk
hi~谢谢解答;

但我的状态用的是RocksDB,实质上不应该是存的磁盘么?为什么会一直占用tm的内存呢?



-
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/

答复: flink使用RocksDB增量checkpoints,程序运行一段时间报出:超出物理内存

2020-12-06 文章 范超
中间状态用完了最好是clear掉。不然一直会占用tm的内存的呢

-邮件原件-
发件人: bradyMk [mailto:zhbm...@126.com] 
发送时间: 2020年12月5日 星期六 17:29
收件人: user-zh@flink.apache.org
主题: flink使用RocksDB增量checkpoints,程序运行一段时间报出:超出物理内存

大家好~

最近刚刚尝试使用flink 1.9.1 的RocksDB做增量checkpoints;

在程序种设置:
val backend = new RocksDBStateBackend("hdfs://xx/", true)
   
backend.setPredefinedOptions(PredefinedOptions.SPINNING_DISK_OPTIMIZED_HIGH_MEM)
并用MapState保存中间状态;(中间状态大概10个G);

我启动程序时,给taskmanager设置了3G内存:“-ytm 3072m \”,但是我的程序每跑一段时间都会报出超出物理内存的错误:"is
running beyond physical memory limits. Current usage: 3.0 GB of 3 GB physical 
memory used; 6.2 GB of 14.6 TB virtual memory used"

我对此有点不解,RocksDB不是会定期把状态写到hdfs么?为什么内存占用会越来越大,最终被yarn
kill掉呢?难道是我漏掉了什么参数配置?希望各位能指点迷津~谢谢大家




-
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/