flink-user-zh mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lvwenyuan <lvwenyuan...@163.com>
Subject Re:Re: Re: Flink RocksDBStateBackend 问题
Date Tue, 06 Aug 2019 06:53:27 GMT
唐老师您好:
         我这里指的是checkpoint时存储数据的file system,这里我用的是HDFS。
        按照老师的说法,我可不可以这样理解(在Flink on yarn 以及 使用
RocksDBStateBackend 的场景下): 
               1.做增量checkpoint的时候,taskmanager默认异步的将数据写入rocksdb和hdfs中(数据是相同的)。
               当taskmanager异常退出时,会启动另一个taskmanager去做task,那么新起的taskmanager是否会去hdfs上同步数据。
               那么这个rocksdb的意义是在哪里?数据反正HDFS上都有,而且HDFS本身也多副本。
               2.在做savepoint的时候,一般会将数据保存在HDFS上,那么这个是,我的命令是
 flink cancel -s  。做完savepoint就退出,那么这个时候rocksdb还需要去写数据吗?因为做完savepoint,整个任务就结束了。


  望解答,谢谢老师!







在 2019-08-06 13:44:18,"Yun Tang" <myasuka@live.com> 写道:
>@lvwenyuan<mailto:lvwenyuan163@163.com>
>首先需要明确的一点是,你这里的“FileSystem”指的究竟是checkpoint时存储数据的file
system,还是FsStateBackend,建议下次提问前可以把需要咨询的内容表述清楚一些。
>
>  *   如果指的是存储checkpoint数据的远程file system,在incremental checkpoint场景下,这些数据与RocksDB的创建checkpoint时刷写到本地的sst文件和meta文件是二进制相同的,只是文件名会重命名。如果是savepoint或者全量checkpoint场景下,这些数据是RocksDB中逐个有效entry的序列化内容。
>  *   如果指的是FsStateBackend,对于Flink而言存储的数据内容在逻辑上肯定都是一样的,否则就不符合语义了。但是二者在数据存储格式上是有区别的。FsStateBackend所创建的HeapKeyedStateBackend的数据内容都是存储在Java
heap内的,基本数据格式是StateTable[1]和其中存储数据的StateMap[2]。而RocksDB存储的数据主要是RocksDB
native内存中的writer buffer(memtable),block cache,index&filter[3]和已经刷写到磁盘上默认采用snappy压缩的不可变sst文件构成。
>
>[1] https://github.com/apache/flink/blob/master/flink-runtime/src/main/java/org/apache/flink/runtime/state/heap/StateTable.java
>[2] https://github.com/apache/flink/blob/master/flink-runtime/src/main/java/org/apache/flink/runtime/state/heap/StateMap.java
>[3] https://github.com/facebook/rocksdb/wiki/Memory-usage-in-RocksDB
>
>
>祝好
>唐云
>
>________________________________
>From: 戴嘉诚 <a773807943@gmail.com>
>Sent: Tuesday, August 6, 2019 12:01
>To: user-zh@flink.apache.org <user-zh@flink.apache.org>
>Subject: 答复: Re: Flink RocksDBStateBackend 问题
>
>        不是,文档上有说,filesystem是会把正在运行的数据存储在tm的内存中,然后触发checkpoint后,才会写入文件系统上,而rocksdb是直接把运行中的数据写到了rocksdb上,看样子是不占用运行中的tm的内存。
>
> https://ci.apache.org/projects/flink/flink-docs-release-1.8/ops/state/state_backends.html#the-fsstatebackend
>
>`The FsStateBackend holds in-flight data in the TaskManager’s memory. Upon checkpointing,
it writes state snapshots into files in the configured file system and directory. Minimal
metadata is stored in the JobManager’s memory (or, in high-availability mode, in the metadata
checkpoint).`
>
>发件人: athlon512@gmail.com
>发送时间: 2019年8月6日 11:53
>收件人: user-zh
>主题: Re: Re: Flink RocksDBStateBackend 问题
>
>你说的是memsystem的状态数据存在jm内存中的filesystem是存到文件系统上的
>
>
>
>athlon512@gmail.com
>发件人: 戴嘉诚
>发送时间: 2019-08-06 11:42
>收件人: user-zh
>主题: Re: Flink RocksDBStateBackend 问题
>FileSystem 我记得是存储的大小是不能超过tm的内存还是jm的内存,而rocksdb上存储的数据是可以无限的,不过相对来说,
>FileSystem的吞吐就会比rocksdb会高
>lvwenyuan <lvwenyuan163@163.com> 于2019年8月6日周二 上午11:39写道:
>> 请教各位:
>>        RocksDBStateBackend
>> 中,rocksdb上存储的内如和FileSystem上存储的数据内容是一样的?如果不一样,那么分别是什么呢?感谢回答
>>
>>
>>
>>
>
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message