开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink CDC里如何通过降低效率来减少内存占用呢?内存有限的情况下,如何调整啊?

Flink CDC里如何通过降低效率来减少内存占用呢?内存有限的情况下,如何调整啊?4752cf01c5c1fb6aad1254bb75d83b17.png

展开
收起
小小鹿鹿鹿 2024-02-01 17:30:15 104 0
1 条回答
写回答
取消 提交回答
  • 在 Apache Flink CDC 场景下,如果你希望减少内存占用但又不希望停止任务运行,可以从以下几个方面着手进行调整和优化,以牺牲部分效率为代价换取更低的内存使用:

    1. 降低并发度
      减少TaskManager上的并行子任务数量,这样每个子任务可以分配到更多的内存资源,但也意味着整体处理速度可能会下降。

    2. 优化State Backend
      调整状态后端存储策略,比如从 RocksDB 更改为 MemoryStateBackend 或 FsStateBackend,虽然可能会牺牲查询速度和故障恢复速度,但可以降低内存压力。

    3. 限制State大小
      设置状态大小限制,比如设置 state.backend.rocksdb.locality.limits.memorymanaged.state.size,避免状态无限制增长导致内存溢出。

    4. 降低维表缓存大小或刷新频率
      如果使用 JDBC 维表 JOIN 并且进行了缓存,可以减少缓存容量或增大缓存失效时间,这样虽然会导致更多数据库查询从而降低效率,但是可以减少内存占用。

    5. 调整Flink内部缓冲区大小
      缩小网络缓冲区、排序缓冲区和块管理器的内存分配,如通过配置 taskmanager.network.memory.segment-sizetaskmanager.memory.managed.fraction 等参数来减少内部缓冲。

    6. Schema初始化超时
      如前所述,可以设置 table.scan.startup.timeout 参数来限制 Schema 初始化读取的时间,这样即使牺牲一点启动速度也能防止长时间持有大量内存。

    7. 减少并行源的数量
      如果CDC源连接的是多个数据库实例并且是并行读取的,可以适当减少并行源的数量。

    8. 优化Join策略和条件
      如果存在大量JOIN操作,尝试简化JOIN逻辑或者只保留必要的JOIN,避免不必要的数据关联带来的内存消耗。

    2024-02-10 17:41:11
    赞同 1 展开评论 打赏

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

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载