You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by jiafu <53...@qq.com> on 2020/07/31 08:40:36 UTC

回复:RocksDBKeyedStateBackend如何写磁盘

writerbuffer写满会flush到磁盘,checkpoint启动的时候会有一次snapshot过程,会让rocksdb做checkpoint,然后将数据刷到磁盘形成sst文件。




------------------&nbsp;原始邮件&nbsp;------------------
发件人:                                                                                                                        "user-zh"                                                                                    <sujun891020@gmail.com&gt;;
发送时间:&nbsp;2020年7月31日(星期五) 下午4:37
收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;

主题:&nbsp;RocksDBKeyedStateBackend如何写磁盘



hi all,

请问RocksDBKeyedStateBackend是何时将state序列化到磁盘的, 窗口结束时间?还是配置的checkpoint周期,谢谢

-- 
Best,
Jun Su

Re: RocksDBKeyedStateBackend如何写磁盘

Posted by jun su <su...@gmail.com>.
hi congxian,

感谢回复 , 我会再调查下 , 多谢

Congxian Qiu <qc...@gmail.com> 于2020年8月2日周日 下午2:11写道:

> Hi  jiafu
>     RocksDB 刷磁盘是它自己负责的(writebuffer 满了,就会 flush 到磁盘,具体的可以看下 RocksDB 的文档),另外在
> snapshot 的时候会 flush 一次 writebuffer 来保证一致性。
>     你上面截图的是 Flink 中 wrapper 的一个 write batch 操作,这个方法的含义是,积攒一批 操作 再去写
> rocksdb,和 rocksdb 刷磁盘还不是一回事。
> Best,
> Congxian
>
>
> jun su <su...@gmail.com> 于2020年7月31日周五 下午4:57写道:
>
> > hi,
> >
> > 看到 RocksDBWriteBatchWrapper类有 flushIfNeeded()方法 , 是这个么?
> >
> >  private void flushIfNeeded() throws RocksDBException {
> > boolean needFlush = batch.count() == capacity || (batchSize > 0 &&
> > getDataSize() >= batchSize);
> > if (needFlush) {
> > flush();
> > }
> > }
> >
> > batchSize 来自 state.backend.rocksdb.write-batch-size 参数的配置
> >
> > jiafu <53...@qq.com> 于2020年7月31日周五 下午4:41写道:
> >
> > >
> > >
> >
> writerbuffer写满会flush到磁盘,checkpoint启动的时候会有一次snapshot过程,会让rocksdb做checkpoint,然后将数据刷到磁盘形成sst文件。
> > >
> > >
> > >
> > >
> > > ------------------&nbsp;原始邮件&nbsp;------------------
> > > 发件人:
> > >                                                   "user-zh"
> > >                                                                     <
> > > sujun891020@gmail.com&gt;;
> > > 发送时间:&nbsp;2020年7月31日(星期五) 下午4:37
> > > 收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;
> > >
> > > 主题:&nbsp;RocksDBKeyedStateBackend如何写磁盘
> > >
> > >
> > >
> > > hi all,
> > >
> > > 请问RocksDBKeyedStateBackend是何时将state序列化到磁盘的, 窗口结束时间?还是配置的checkpoint周期,谢谢
> > >
> > > --
> > > Best,
> > > Jun Su
> >
> >
> >
> > --
> > Best,
> > Jun Su
> >
>


-- 
Best,
Jun Su

Re: RocksDBKeyedStateBackend如何写磁盘

Posted by Congxian Qiu <qc...@gmail.com>.
Hi  jiafu
    RocksDB 刷磁盘是它自己负责的(writebuffer 满了,就会 flush 到磁盘,具体的可以看下 RocksDB 的文档),另外在
snapshot 的时候会 flush 一次 writebuffer 来保证一致性。
    你上面截图的是 Flink 中 wrapper 的一个 write batch 操作,这个方法的含义是,积攒一批 操作 再去写
rocksdb,和 rocksdb 刷磁盘还不是一回事。
Best,
Congxian


jun su <su...@gmail.com> 于2020年7月31日周五 下午4:57写道:

> hi,
>
> 看到 RocksDBWriteBatchWrapper类有 flushIfNeeded()方法 , 是这个么?
>
>  private void flushIfNeeded() throws RocksDBException {
> boolean needFlush = batch.count() == capacity || (batchSize > 0 &&
> getDataSize() >= batchSize);
> if (needFlush) {
> flush();
> }
> }
>
> batchSize 来自 state.backend.rocksdb.write-batch-size 参数的配置
>
> jiafu <53...@qq.com> 于2020年7月31日周五 下午4:41写道:
>
> >
> >
> writerbuffer写满会flush到磁盘,checkpoint启动的时候会有一次snapshot过程,会让rocksdb做checkpoint,然后将数据刷到磁盘形成sst文件。
> >
> >
> >
> >
> > ------------------&nbsp;原始邮件&nbsp;------------------
> > 发件人:
> >                                                   "user-zh"
> >                                                                     <
> > sujun891020@gmail.com&gt;;
> > 发送时间:&nbsp;2020年7月31日(星期五) 下午4:37
> > 收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;
> >
> > 主题:&nbsp;RocksDBKeyedStateBackend如何写磁盘
> >
> >
> >
> > hi all,
> >
> > 请问RocksDBKeyedStateBackend是何时将state序列化到磁盘的, 窗口结束时间?还是配置的checkpoint周期,谢谢
> >
> > --
> > Best,
> > Jun Su
>
>
>
> --
> Best,
> Jun Su
>

Re: RocksDBKeyedStateBackend如何写磁盘

Posted by jun su <su...@gmail.com>.
hi,

看到 RocksDBWriteBatchWrapper类有 flushIfNeeded()方法 , 是这个么?

 private void flushIfNeeded() throws RocksDBException {
boolean needFlush = batch.count() == capacity || (batchSize > 0 &&
getDataSize() >= batchSize);
if (needFlush) {
flush();
}
}

batchSize 来自 state.backend.rocksdb.write-batch-size 参数的配置

jiafu <53...@qq.com> 于2020年7月31日周五 下午4:41写道:

>
> writerbuffer写满会flush到磁盘,checkpoint启动的时候会有一次snapshot过程,会让rocksdb做checkpoint,然后将数据刷到磁盘形成sst文件。
>
>
>
>
> ------------------&nbsp;原始邮件&nbsp;------------------
> 发件人:
>                                                   "user-zh"
>                                                                     <
> sujun891020@gmail.com&gt;;
> 发送时间:&nbsp;2020年7月31日(星期五) 下午4:37
> 收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;
>
> 主题:&nbsp;RocksDBKeyedStateBackend如何写磁盘
>
>
>
> hi all,
>
> 请问RocksDBKeyedStateBackend是何时将state序列化到磁盘的, 窗口结束时间?还是配置的checkpoint周期,谢谢
>
> --
> Best,
> Jun Su



-- 
Best,
Jun Su