Sink

FlinkSink�#chainIcebergOperators方法 distribute
�,append、commit、dummy也就是IcebergSink有3个算子。和普通的JDBC只有一个算子不同。
�distribute (keyBy) 数据重新分配均匀
append 写数据
commit 提交数据
dummy 没有作用空的

与Flink源码的对接点

Iceberg 的写入是借助Flink的AbstractStreamOperator接口

与Parquet/ORC的对接点

对接类
RowDataTaskWriterFactory
FlinkAppenderFactory

RowDataTaskWriterFactory
FlinkAppenderFactory#newDataWriter/newAppender

FlinkSink#createStreamWriter()

读取对接_RowDataFileScanTaskReader
#_newIterable

读取

FlinkSource API相关

�新版Source是IcebergSource

ORC

Iceberg纯读取相关

ORC/OrcIterable/OrcRowIterator
ORC只管读一个文件。
OrcFile.createReader -> 创建读文件类 _RecordReader -> _RecordReaderImpl -> pickRowGroups

Flink纯读取 相关

每个并行度内部的读逻辑

RowDataReaderFunction IcebergSource初始化时设置会在IcebergSourceSplitReader
�拉去数据时调用

RowDataFileScanTaskReader 读一个文件,在这个类之前会根据文件数量进行分片。 创建读数据迭代器的

FlinkOrcReader

编译指定Flink版本

  1. ./gradlew clean build -x test -x integrationTest -DflinkVersions=1.14

��


��