Flink CDC 2023-07-07 13:42:24,282 这种读取量太大了,有办法减少数?

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

这种读取量太大了,有办法减少数量吗。
减小了官方文档的下面的参数,还是没用

The chunk size (number of rows) of table snapshot, captured tables are split into multiple chunks when read the snapshot of table.

scan.incremental.snapshot.chunk.size: 4096

he maximum fetch size for per poll when read table snapshot.

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之类的也可以一起减少,这样整体内存就会降下来

展开
收起
真的很搞笑 2023-07-13 13:48:29 372 分享 版权
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在 Flink CDC 中,如果读取量过大,可能会影响任务的性能和稳定性,导致任务运行缓慢或者失败。因此,需要采取一些措施来减少读取量,提高任务的性能和稳定性。

    以下是一些减少 Flink CDC 读取量的方法:

    选择合适的数据源:首先,需要选择合适的数据源。如果数据源中的数据量过大,可能会导致 Flink CDC 的读取量过大。因此,可以考虑对数据源进行分区或者进行数据过滤,以减少读取量。

    配置合适的同步策略:其次,需要配置合适的同步策略。可以根据具体的业务需求和数据特点,选择合适的同步策略,如增量同步、全量同步等。需要注意的是,增量同步可能会比全量同步产生更少的读取量,但是也需要考虑增量同步可能会存在的一些问题,如主键变更、DELETE 操作等。

    调整并发度和批处理大小:还可以调整 Flink CDC 的并发度和批处理大小,以减少读取量。可以根据实际情况调整并发度和批处理大小,以达到最优的性能和稳定性。需要注意的是,并发度和批处理大小不宜过大,否则可能会导致任务运行缓慢或者失败。

    优化 Flink CDC 程序:最后,可以对 Flink CDC 程序进行一些优化,如避免使用无效的数据源或者无用的数据字段等,以减少读取量。

    2023-07-29 22:02:51
    赞同 展开评论
  • 如果 Flink CDC 在读取过程中出现了读取量太大的问题,导致内存溢出 (OutOfMemoryError),可以尝试以下几种方法来减少读取的数据量:

    1. 调整 Chunk Size 和 Fetch Size:您已经提到了scan.incremental.snapshot.chunk.sizescan.snapshot.fetch.size这两个参数,可以继续调小它们的值来减少每次读取的数据量。较小的 Chunk Size 和 Fetch Size 可以将数据分为更小的块进行读取,降低内存的压力。

    2. 调整下游操作符的批处理大小:检查下游的 Sink 或其他操作符是否有合适的批处理机制。通过减小批处理大小,可以在每次操作时处理更少的数据量,从而减轻内存负担。

    3. 考虑增加并行度:如果系统资源允许,可以尝试增加 Flink Job 的并行度。增加并行度可以将数据划分为更多的并发任务,从而减少单个任务需要处理的数据量。

    4. 优化数据模型和查询条件:检查数据模型设计和查询条件,确保只加载和处理必要的数据。使用合适的索引和条件过滤可以减少不必要的数据加载和计算量。

    5. 增加系统内存:如果以上方法无法满足需求,可以考虑增加系统的物理内存。增加系统内存可以提供更多的空间来处理大量的数据。

    需要根据具体情况和系统配置选择适合的方法。如果问题仍然存在,您可能需要进一步分析任务的日志和监控指标,以确定瓶颈所在,并进行针对性的调优。

    2023-07-29 19:39:42
    赞同 展开评论
  • 看一下sink或者中间的operater占不占内存,此回答整理自钉群“Flink CDC 社区”

    2023-07-13 16:14:21
    赞同 展开评论

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

还有其他疑问?
咨询AI助理