当前位置:   article > 正文

flink写入paimon流程代码_flink 写入paimon外部表hive

flink 写入paimon外部表hive

入口是FlinkTableSink,继承自FlinkTableSinkBase

然后到了FlinkSinkBuilder的build()

以buildForFixedBucket为例

  1. FixedBucketSink extends FlinkWriteSink<InternalRow>
  2. 而 FlinkWriteSink<T> extends FlinkSink<T> 

所以代码走到了FlinkSink 的sinkFrom()

分别调用了doWrite()和doCommit()

doWrite()调用了createWriteOperator,java类的继承机制这个实现又回到了子类FixedBucketSink类

注意此时父类doWrite()里传参的时候调用了createWriteProvider()返回StoreSinkWrite.Provider

接着上面代码RowDataStoreWriteOperator类,里面有一个processElement()

RowDataStoreWriteOperator继承TableWriteOperator,这个类又通过provider初始化了write,RowDataStoreWriteOperator类刚才用到了父类TableWriteOperator的write对象

以StoreSinkWrite.Provider是StoreSinkWriteImpl为例,那上面的write()实际调用就是这个类的write()

StoreSinkWriteImpl类又有一个write对象=> FileStoreWrite

FileStoreWrite其中一个子类AbstractFileStoreWrite需要细看,这次简单看下

其中一部分是用了RecordWriter去写数据

最终走到了MergeTreeWriter的write(),判断内存是否满了,满了就溢出磁盘

flushWriteBuffer()做了很多,包括判断是否需要进行等待上一次compact结束、数据flush、保存一些信息方便checkpoint、尝试触发一次新的compact

writeBuffer.forEach这段keyComparator,mergeFunction两个对象是传参进来的

Comparator看起来是一个比较器

mergeFunction对应paimon的几个primary key表类型

doCommit()时new了一个CommitterOperator(),

这个类主要有几个方法

commiter.commit的逻辑是将所有的flush信息进行一次commit操作,最终flush信息会被序列化成json信息保存在snapshot文件中,当commit成功后,Paimon表会新增一次snapshot

下次介绍抽象类和合并提交具体代码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/886669
推荐阅读
相关标签
  

闽ICP备14008679号