Flink CDC 2023-07-07 13:42:24,282 INFO com.ververica.cdc.connectors.mysql.debezium.task.MySqlSnapshotSplitReadTask [] - Exported 194355 records for split 'egenie_baseinfo.platform_product_match:1' after 00:01:37.543
2023-07-07 13:42:22,858 ERROR com.ververica.cdc.connectors.mysql.debezium.reader.SnapshotSplitReader [] - Execute snapshot read task for mysql split MySqlSnapshotSplit{tableId=egenie_baseinfo.platform_product_match, splitId='egenie_baseinfo.platform_product_match:0', splitKeyType=[platform_product_match_id
BIGINT NOT NULL], splitStart=null, splitEnd=[12077194], highWatermark=null} fail
java.lang.OutOfMemoryError: GC overhead limit exceeded
这种读取量太大了,有办法减少数量吗。
减小了官方文档的下面的参数,还是没用
scan.incremental.snapshot.chunk.size: 4096
scan.snapshot.fetch.size: 512?主要还是读取的数据太多了。
2023-07-07 11:12:44,983 INFO com.ververica.cdc.connectors.mysql.debezium.task.MySqlSnapshotSplitReadTask [] - Exported 140040 records for split 'egenie_baseinfo.platform_product_match:2' after 00:00:34.526,类似这种一次14万数据,那chuck.size,fetch.size继续减少试试看,同时下游的batch.size之类的也可以一起减少,这样整体内存就会降下来
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在 Flink CDC 中,如果读取量过大,可能会影响任务的性能和稳定性,导致任务运行缓慢或者失败。因此,需要采取一些措施来减少读取量,提高任务的性能和稳定性。
以下是一些减少 Flink CDC 读取量的方法:
选择合适的数据源:首先,需要选择合适的数据源。如果数据源中的数据量过大,可能会导致 Flink CDC 的读取量过大。因此,可以考虑对数据源进行分区或者进行数据过滤,以减少读取量。
配置合适的同步策略:其次,需要配置合适的同步策略。可以根据具体的业务需求和数据特点,选择合适的同步策略,如增量同步、全量同步等。需要注意的是,增量同步可能会比全量同步产生更少的读取量,但是也需要考虑增量同步可能会存在的一些问题,如主键变更、DELETE 操作等。
调整并发度和批处理大小:还可以调整 Flink CDC 的并发度和批处理大小,以减少读取量。可以根据实际情况调整并发度和批处理大小,以达到最优的性能和稳定性。需要注意的是,并发度和批处理大小不宜过大,否则可能会导致任务运行缓慢或者失败。
优化 Flink CDC 程序:最后,可以对 Flink CDC 程序进行一些优化,如避免使用无效的数据源或者无用的数据字段等,以减少读取量。
如果 Flink CDC 在读取过程中出现了读取量太大的问题,导致内存溢出 (OutOfMemoryError),可以尝试以下几种方法来减少读取的数据量:
1. 调整 Chunk Size 和 Fetch Size:您已经提到了scan.incremental.snapshot.chunk.size
和scan.snapshot.fetch.size
这两个参数,可以继续调小它们的值来减少每次读取的数据量。较小的 Chunk Size 和 Fetch Size 可以将数据分为更小的块进行读取,降低内存的压力。
2. 调整下游操作符的批处理大小:检查下游的 Sink 或其他操作符是否有合适的批处理机制。通过减小批处理大小,可以在每次操作时处理更少的数据量,从而减轻内存负担。
3. 考虑增加并行度:如果系统资源允许,可以尝试增加 Flink Job 的并行度。增加并行度可以将数据划分为更多的并发任务,从而减少单个任务需要处理的数据量。
4. 优化数据模型和查询条件:检查数据模型设计和查询条件,确保只加载和处理必要的数据。使用合适的索引和条件过滤可以减少不必要的数据加载和计算量。
5. 增加系统内存:如果以上方法无法满足需求,可以考虑增加系统的物理内存。增加系统内存可以提供更多的空间来处理大量的数据。
需要根据具体情况和系统配置选择适合的方法。如果问题仍然存在,您可能需要进一步分析任务的日志和监控指标,以确定瓶颈所在,并进行针对性的调优。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。