Flink CDC中,在Incremental Snapshot PG数据库的时候,默认按主键第一个column来split chunk,但是遇到一张大表,主键是多个字段组成的,按第一个主键的column划分出现了数据倾斜的,这种情况怎么处理?CDC的TM日志返回的信息如下:
Snapshot step 1 - Determining low watermark Offset{lsn=LSN{5AD/DB087398}, txId=1277515238, lastCommitTs=-9223372036854775808] for split SnapshotSplit{tableId=rls_schema.t_gl_xxx, splitId='rls_schema.t_gl_balance:56', splitKeyType=[fdbid BIGINT NOT NULL], splitStart=[1651016882125489413], splitEnd=[1651020940074771723], highWatermark=null}
是的,Flink CDC在Incremental Snapshot PG数据库中默认按主键第一个column来split chunk。当遇到一张大表,主键是多个字段组成的时,按第一个主键的column划分可能会出现数据倾斜。
要解决这个问题,可以尝试以下方法:
scan.incremental.snapshot.chunk.size
和scan.incremental.snapshot.chunk.key-column
配置,以便根据指定的主键组合键来划分chunk。例如,如果主键是(fdbid, BIGINT NOT NULL)
,则可以将scan.incremental.snapshot.chunk.key-column
设置为fdbid
。这样,Flink CDC将根据这个列的值来划分chunk,从而减少数据倾斜的可能性。Flink CDC在处理Incremental Snapshot PG数据库时,默认按主键第一个column来划分chunk。如果遇到一张大表,主键是多个字段组成的,按第一个主键的column划分出现了数据倾斜的问题,可以尝试以下方法解决:
scan.incremental.snapshot.chunk.size
参数,增加每个chunk的大小,以便容纳更多的数据。scan.incremental.snapshot.chunk.key-column
配置指定某个表按配置的pk组合键来划分chunk。例如,如果你想要按fdbid
和BIGINT NOT NULL
两个字段的组合键划分chunk,可以这样配置:flink-cdc:
source:
connector:
type: ... # 您的数据源连接器类型
...
properties:
scan.incremental.snapshot.chunk.size: 8096
scan.incremental.snapshot.chunk.key-column: "fdbid, BIGINT NOT NULL"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。