帮你快速理解、总结文档立即下载

Iceberg 连接器

最近更新时间:2026-10-15 17:58:30
我的收藏
Iceberg 连接器可以作为 Sink(type: iceberg),把上游的变更事件写入 Apache Iceberg 湖存储,提供自动建表、表结构变更同步与数据实时同步能力。


前置准备

已部署可用的 Iceberg catalog,支持 hadoop、hive 等类型,也可以通过 catalog.properties.catalog-impl 指定自定义实现。
作业运行环境需能访问 warehouse 目录与元数据服务。


版本说明

Flink 版本
说明
1.20
基于 Flink-cdc 社区 release-3.6 开发,JDK 版本为 11,支持 Iceberg 版本为 1.6、1.7、1.8、1.9、1.10

使用范围

可作为 Sink(type: iceberg)使用。


快速示例

使用 Hadoop catalog:
source:
type: mysql
name: MySQL Source
hostname: 127.0.0.1
port: 3306
username: admin
password: pass
tables: adb.\\.*
server-id: 5401-5404

sink:
type: iceberg
name: Iceberg Sink
catalog.properties.type: hadoop
catalog.properties.warehouse: /path/warehouse

pipeline:
name: MySQL to Iceberg Pipeline
parallelism: 2

使用 Hive catalog:
sink:
type: iceberg
name: Iceberg Sink
catalog.properties.type: hive
catalog.properties.uri: thrift://127.0.0.1:9083
catalog.properties.warehouse: hdfs:///path/warehouse


Sink 配置项

参数
是否必填
默认值
类型
说明
catalog.properties.type
条件必填
(none)
String
Iceberg catalog 的类型,可取 hadoop、hive。
与 catalog.properties.catalog-impl 必须配置其一。
catalog.properties.catalog-impl
条件必填
(none)
String
自定义 catalog 实现类的全限定名。
内置的 hadoop 与 hive 类型已覆盖常用场景,通常无需配置; 如需对接其他 catalog,可指定其实现类。
与 catalog.properties.type 必须配置其一。
catalog.properties.warehouse
optional
(none)
String
Iceberg 仓库的根目录,适用于所有 catalog 类型。
通常为本地或分布式文件系统路径,例如 hdfs://namenode:8020/warehouse。
catalog.properties.io-impl
optional
(none)
String
自定义 FileIO 实现类的全限定名。
warehouse 不在默认文件系统上时,需要指定对应的实现类。
partition.key
optional
(空)
String
为目标表指定分区键,详见「分区表」章节。
sink.compaction.enabled
optional
false
Boolean
是否开启小文件合并。属于实验性能力,同步的表较多时可能造成数据流阻塞,
请谨慎开启,或改用 Iceberg 的表维护服务进行小文件合并。
sink.compaction.commit.interval
optional
10
Integer
每张 Iceberg 表合并小文件的提交间隔。属于实验性能力, 仅在 sink.compaction.enabled 开启时生效。
sink.compaction.commit.parallelism
optional
-1
Integer
小文件合并的并行度。取 -1 时与 Sink 写入算子的并行度一致。
属于实验性能力,仅在 sink.compaction.enabled 开启时生效。
job.id.prefix
optional
cdc
String
作业 ID 的前缀,用于区分不同作业。属于实验性能力,通常无需修改。
catalog.properties.*
optional
(none)
String
透传给 Iceberg catalog 的参数,属性名去掉该前缀后传给 catalog。
例如 catalog.properties.uri: thrift://127.0.0.1:9083。
table.properties.*
optional
(none)
String
建表时写入 Iceberg 表属性的参数,属性名去掉该前缀后作为表属性,
可参考 Iceberg 表配置。
例如 table.properties.format-version: '2'。
Sink 侧的时区取自 pipeline 配置 local-time-zone,未配置时使用作业运行环境的系统时区。


分区表

通过 partition.key 可以为目标表指定分区键。多条配置之间用英文分号(;)分隔,
表名与分区键之间用英文冒号(:)分隔,同一张表的多个分区键之间用英文逗号(,)分隔。
sink:
type: iceberg
partition.key: testdb.table1:id1,id2;testdb.table2:name

除直接指定字段名外,还支持下列分区转换:
语法
说明
identity(name)(直接写字段名)
按字段原值分区,未匹配到任何转换语法时按此处理
year(name)
按字段的年份分区
month(name)
按字段的月份分区
day(name)
按字段的日期分区
hour(name)
按字段的小时分区
bucket[N](name)
按字段哈希分到 N 个桶
truncate[W](name)
按字段截断到宽度 W 后分区
sink:
type: iceberg
partition.key: testdb.table1:truncate[10](id);testdb.table2:hour(create_time);testdb.table3:day(create_time);testdb.table4:month(create_time);testdb.table5:year(create_time);testdb.table6:bucket[10](create_time)

需要注意:
表名需要与上游表的标识一致,格式为 namespace.tableName。
格式不符合要求时作业启动失败。
配置了 partition.key 时,优先使用这里的分区键;未配置时使用上游表结构自带的分区键。


表结构变更同步

Iceberg Sink 支持下列表结构变更:
变更类型
说明
CREATE TABLE
自动建库建表。
ADD COLUMN
新增列,支持 FIRST、AFTER、BEFORE、LAST 四种位置。
DROP COLUMN
删除列。
RENAME COLUMN
重命名列。
ALTER COLUMN TYPE
修改列类型。

下列表结构变更暂不支持,上游产生这些事件时作业会失败:
DROP TABLE(删除表)
TRUNCATE TABLE(清空表)
ALTER TABLE COMMENT(修改表注释)

上游存在删表、清空表、改表注释的操作时,需要在 Source 侧通过exclude.schema.changes 排除对应事件类型,否则作业会失败。


自动建表

上游表不存在时,连接器会自动创建对应的 Iceberg 表,规则如下:

命名空间不存在时自动创建。
列的类型按下表「数据类型映射」转换,并保留列注释。
上游表的主键会被记录为 Iceberg 表的 identifier fields。
table.properties.* 指定的参数会写入表属性,对所有新建表生效。
列的默认值仅在表格式为 v3 及以上时写入,v2 及以下会被忽略。
数据文件格式为 Parquet。


数据类型映射

CDC 类型
Iceberg 类型
说明
CHAR(n)
VARCHAR(n)
STRING
string
-
BOOLEAN
boolean
-
BINARY(n)
VARBINARY(n)
BYTES
binary
-
DECIMAL(p, s)
decimal(p, s)

TINYINT
int
统一提升为 int。
SMALLINT
int
统一提升为 int。
INT
int
-
BIGINT
long
-
FLOAT
float
-
DOUBLE
double
-
DATE
date
-
TIME(p)
time
-
TIMESTAMP(p)
timestamp
-
TIMESTAMP_LTZ(p)
TIMESTAMP WITH TIME ZONE(p)
timestamptz
-