FlinkCDC 数据倾斜

张开发
2026/4/17 4:08:15 15 分钟阅读

分享文章

FlinkCDC 数据倾斜
场景Mysql 整库采集至 Paimon 出现数据倾斜现象FlinkCDC 数据倾斜处理参考处理思想数据倾斜问题可以通过多表混合读取的方式来解决。在引入多表混合读取之前Flink CDC 会按顺序读取完所有表的全量数据导致下游 sink 在读取单一表数据时发生倾斜。实现多表混合读取后Flink CDC 会同时读取多张表的 chunk 数据例如先读取 tableA 的 chunk1再读取 tableB 的 chunk1以此类推直到所有表的 chunk 数据都被读取从而保证了每个 sink 都有数据流入有效解决了数据倾斜问题。FlinkCDC 3.0 版本对于一张表的处理会均匀派发给空闲子任务进行并行处理。FlinkCDC Mysqlorg.apache.flink.cdc.connectors.mysql.source.enumerator.MySqlSourceEnumerator#assignSplits派发 split 给子任务sinkDemoorg.apache.flink.streaming.api.datastream.DataStream#sinkTo(org.apache.flink.api.connector.sink2.SinkT)org.apache.flink.streaming.api.datastream.DataStreamSink#forSinkorg.apache.flink.connector.kafka.sink.KafkaWriter#writeorg.apache.flink.connector.kafka.sink.KafkaRecordSerializationSchemaBuilder.KafkaRecordSerializationSchemaWrapper#serializeorg.apache.flink.kafka.shaded.org.apache.kafka.clients.producer.KafkaProducer#doSendorg.apache.kafka.clients.producer.KafkaProducer#partitionpublicintpartition(Stringtopic,Objectkey,byte[]keyBytes,Objectvalue,byte[]valueBytes,Clustercluster,intnumPartitions){returnkeyBytesnull?this.stickyPartitionCache.partition(topic,cluster):Utils.toPositive(Utils.murmur2(keyBytes))%numPartitions;}

更多文章