Flink CDC读取mysql整库, 数据量大了有办法提升读取效率吗? 增量并行度只能1吧?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用Flink CDC读取MySQL整库时,如果数据量较大,可以通过以下方法提升读取效率。同时,针对增量阶段的并行度问题,也提供了解决方案。
全量读取阶段是Flink CDC读取MySQL数据的关键步骤,尤其是在数据量较大的情况下,优化全量读取效率尤为重要。
配置Server ID范围:
在全量读取阶段,可以通过增加并发度来加速数据读取。为了支持多并发,需要为MySQL CDC源表配置一个server-id
范围,且范围内的唯一server-id
数量必须大于等于作业的并发数。例如:
SELECT * FROM mysql_source_table /*+ OPTIONS('server-id'='5400-5408') */;
上述配置中,server-id
范围为5400-5408
,共9个唯一ID,因此可以设置最多9个并发。
自动调优(Autopilot):
如果全量阶段积累了大量历史数据,建议开启自动调优功能(Autopilot)。自动调优会根据流量动态调整Source的CU数和并发度,从而提高资源利用率和读取效率。
开启方式:在作业运维页面将自动调优模式设置为Active
模式。
debezium.min.row.count.to.stream.results
控制分批读取的阈值,默认值为1000。如果表的数据量超过该阈值,Flink会分批读取数据。在增量阶段,由于MySQL Binlog是全局有序的,通常只能使用单并发读取以保证数据的全局顺序性。但在某些场景下,仍然可以通过以下方法提升增量读取效率:
debezium.max.queue.size=162580
debezium.max.batch.size=40960
debezium.poll.interval.ms=50
debezium.max.queue.size
:阻塞队列的最大容量,默认值为8192。debezium.max.batch.size
:每次处理的事件条数最大值,默认值为2048。debezium.poll.interval.ms
:请求新变更事件的间隔时间,默认值为1000毫秒。server-id
除外)相同,可以启用Source复用功能。Flink会尝试合并这些源表,减少数据库连接数和Binlog拉取压力。CDAS
语句将多个表的同步任务合并为一个作业运行。这样可以减少server-id
的使用,降低数据库的压力。希望以上内容能帮助您解决Flink CDC读取MySQL整库时的性能问题!
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。