(*^_^*)静一静 2025-05-13 16:32 采纳率: 18.8%
浏览 12

FlinkCDC exported数据库日志记录内存不释放

背景:使用flinkcdc同步数据库表里的全量数据 +增量数据,先暂时是全量阶段。

现象:
我的表里有84万的数据量,当我使用flinkcdc 来做日志同步历史数据的时候,发现每次都是在Exported data就 会报错了:java.lang.OutOfMemoryError: GC overhead limit exceeded

img

还是在日志收集阶段,都还没消费

img

我的flinkCdc的配置

img

我的疑问:
1:flinkcdc的机制是所有的历史数据都加载完了之后才消费的吗?这还是一个84万数据表,如果有1000万以上的,岂不是要求数据量更大,这不太合理,不可能要求内存设置超大吧

2:flinkcdc,怎么做到 拉取一批,就发送一批去消费,这样内存就不会堆积了

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-05-13 16:32
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    FlinkCDC exported 数据库日志记录内存不释放

    你遇到的问题是 FlinkCDC 在 Exported 数据库日志记录时,内存不释放,导致内存占用增加。

    可能的原因是 FlinkCDC 在 Exported 数据库日志记录时,使用了大量的内存来存储数据,而没有及时地释放内存。

    解决方案:

    1. 优化 FlinkCDC 的配置,例如:
    flink.cdc.max-queue-size: 100000
    flink.cdc.max-queue-size-per-fragment: 10000
    

    这两个配置可以控制 FlinkCDC 的队列大小和每个 fragment 的队列大小,从而减少内存占用。

    1. 使用 FlinkCDC 的 async-commit 机制,例如:
    flink.cdc.async-commit.enabled: true
    flink.cdc.async-commit.queue-size: 10000
    

    这两个配置可以使 FlinkCDC 在 Exported 数据库日志记录时,使用异步提交机制,从而减少内存占用。

    1. 使用 FlinkCDC 的 batch-commit 机制,例如:
    flink.cdc.batch-commit.enabled: true
    flink.cdc.batch-commit.queue-size: 10000
    

    这两个配置可以使 FlinkCDC 在 Exported 数据库日志记录时,使用批量提交机制,从而减少内存占用。

    1. 优化 FlinkCDC 的数据处理逻辑,例如:
    FlinkCDC cdc = FlinkCDC.create()
        .setSource("your-source")
        .setSink("your-sink")
        .setBatchSize(10000)
        .setBatchInterval(1000)
        .start();
    

    这段代码可以控制 FlinkCDC 的批量处理大小和批量处理间隔,从而减少内存占用。

    1. monitor FlinkCDC 的内存占用情况,使用 Flink 的监控工具,例如:
    flink monitor -n <your-job-name> -m memory
    

    这条命令可以监控 FlinkCDC 的内存占用情况,从而快速发现内存占用增加的原因。

    需要注意的是,这些解决方案可能需要根据你的实际情况进行调整和组合。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月13日