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

Flink CDC中 2.2.1 造成oracle session数过多,吃内存有优化的方案没呢?

Flink CDC中 2.2.1 造成oracle session数过多,吃内存有优化的方案没呢?

展开
收起
冲冲冲c 2024-06-26 10:29:02 70 0
8 条回答
写回答
取消 提交回答
  • 调整Flink任务并行度:增加并行度可以分散session的创建,减少单个任务的内存压力,但需注意不要超过Oracle的连接数限制。
    优化fetch.size和query.split.size配置:适当增加fetch.size来减少网络IO次数,同时调整query.split.size以优化数据读取的粒度。
    使用连接池:如果可能,配置连接池(如DBCP或HikariCP)来复用数据库连接,减少新建和销毁session的开销。
    监控和调整Oracle的会话参数:检查Oracle的SESSIONS参数,根据实际需求调整最大会话数。
    优化Flink的buffer和状态管理:检查Flink的内存配置,如taskmanager.memory.task.heap.size,确保内存管理有效。

    2024-07-24 15:23:44
    赞同 展开评论 打赏
  • 整并行度:增加Flink任务的并行度,可以分散session压力,减少单个任务对内存的占用。合理设置并行度能改善资源使用。

    优化读取策略:如果可能,使用split-aware模式来减少并发session,或者调整table.cdc.source.partition.num以控制并行分区数。

    设置合适的缓冲区大小:调整Flink的缓冲区大小(buffer-size和max-buffer-size)来控制数据流处理的内存消耗。

    监控和限制连接数:通过监控Oracle数据库的连接数,确保不超过Oracle的最大连接数,避免过多连接占用内存。

    优化Flink配置:根据实际需求调整Flink的内存配置,如taskmanager.memory.task.heap.size等,确保内存分配合理。

    升级或优化Oracle配置:检查Oracle数据库的配置,优化内存分配,或升级到更高效版本。

    2024-07-24 11:05:58
    赞同 展开评论 打赏
  • 阿里云大降价~

    一般优化可以配置心跳间隔与超时时间:确保Flink客户端与Oracle数据库之间的心跳机制配置得当,避免因心跳过于频繁导致的session资源占用。可以通过增大心跳间隔和心跳超时时间来减少对Oracle数据库session的频繁创建与维护,从而减轻内存压力。

    另外优化Session集群资源配置:
    增加Task Managers数量:根据作业的并发需求适当增加Task Managers的数量,但需注意不要过度增加以防止资源争抢。保持taskmanager.numberOfTaskSlots为默认值1,避免因slot共享导致的额外资源消耗和复杂性。
    调整JobManager与TaskManager资源:对于大规模作业或复杂拓扑,适当增加JobManager的CPU和内存配置,以及TaskManager的资源,如CPU和内存大小,以提升整体处理能力和稳定性。例如,Job Manager CPUs可设为4,Memory设为8 GiB;Task Manager CPUs设为2,Memory设为4 GiB

    image.png

    参考文档: https://help.aliyun.com/zh/flink/user-guide/debug-a-deployment

    2024-07-23 17:18:45
    赞同 展开评论 打赏
  • 在使用 Flink CDC 从 Oracle 数据库捕获更改数据时,确实有可能遇到 Oracle session 数量过多和内存消耗大的问题。这主要是因为 Flink CDC 连接器为每个数据流任务创建和维护了多个 Oracle 数据库连接,这会占用大量的 Oracle session 和 Flink 的内存资源。

    以下是一些优化方案,可以尝试来减少 session 数量和内存消耗:

    1. 调整 Flink 并行度

    降低 Flink CDC 作业的并行度可以减少所需的 Oracle session 数量。虽然这可能会影响处理速度,但在 session 限制严格的环境下,这是必要的折衷。

    2. 使用连接池

    在 Flink CDC 的 Oracle connector 中使用连接池可以有效管理数据库连接,避免为每个 task 都创建新的连接。连接池可以复用连接,减少 session 的创建和销毁次数,从而节省资源。

    然而,Flink CDC 默认并没有直接支持连接池,你可能需要自定义 Source Function 并实现连接池管理,或者使用社区提供的扩展版本,比如 Debezium 的 Oracle connector,它支持连接池配置。

    3. 优化 Oracle CDC 配置

    确保 Oracle 的 Flashback Data Archive 和 Supplemental Logging 配置正确且高效。不必要的配置可能导致更多的 session 创建和更高的内存使用。

    4. 限制 Flink CDC 的状态后端

    使用状态后端(如 RocksDBStateBackend)时,可以通过配置来限制状态大小,避免过度的内存消耗。例如,可以配置 rocksdb.state.ttl.hours 来自动清理过期的状态。

    5. 适配 Oracle JDBC 驱动

    确保你使用的 Oracle JDBC 驱动是最新的,并且与 Flink 版本兼容。旧版本的驱动可能在性能和资源管理方面不如新版本。

    6. 监控和调优

    使用 Flink 的监控工具和 Oracle 的性能监控工具来识别和定位资源瓶颈。根据监控数据调整并行度、连接池大小、状态后端配置等。

    7. 手动管理 session

    如果可能,可以尝试在 Source Function 中手动管理 session 的生命周期,例如在 open() 方法中创建 session,在 close() 方法中关闭 session,以确保 session 的及时释放。

    8. 调整 Oracle 数据库配置

    检查 Oracle 数据库的参数配置,如 OPEN_CURSORSSESSIONS_PER_USER 等,确保它们适合你的工作负载需求。

    9. 使用异步查询

    如果可能,可以使用异步查询方式来减少等待时间和 session 的空闲时间,但这可能需要修改 Flink CDC 的源码或使用社区提供的扩展功能。

    10. 分析和优化查询

    确保 Flink CDC 的查询和数据处理逻辑尽可能高效,避免不必要的数据复制和冗余操作。

    请注意,这些优化措施可能需要结合你的具体应用场景和环境进行适当的调整和测试。在进行任何重大配置更改之前,建议先在测试环境中验证其效果。

    2024-07-23 11:30:27
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    可以避免 Flink 作业失败后不断重启,从而减少对 Oracle 会话数的压力。可以在 Flink 作业配置中设置重启策略

    restart-strategy: fixed-delay
    restart-strategy.fixed-delay.attempts: 2
    restart-strategy.fixed-delay.delay: 10 s
    

    优化 Oracle 数据库的配置参数,如 PROCESSES 和 SESSIONS,以允许更多的用户连接。

    2024-07-21 18:18:01
    赞同 展开评论 打赏
  • 可以设置下session 的最长连接时间了,到时间就断。

    • 需要开启 resource_limit
    # 查看是否开启
    show parameter resource_limit;
    # 开启 resource_limit
    alter system set resource_limit=true;
    
    • 新建一个 PROFILE 规则
    create profile NEW_PROFILE
    limit
    idle_time 1
    connect_time 2;
    
    • 用户指定 PROFILE 规则
    alter user MY_USER profile NEW_PROFILE;
    

    ——参考链接

    2024-07-21 16:15:33
    赞同 1 展开评论 打赏
  • 针对Flink CDC在处理Oracle数据源时可能导致session数过多、占用大量内存的问题,
    https://help.aliyun.com/zh/flink/getting-started/use-built-in-public-datasets-to-experience-realtime-compute-for-apache-flink
    image.png
    image.png

    2024-07-20 17:25:57
    赞同 展开评论 打赏
  • 针对Flink CDC在处理Oracle数据源时导致Session数过多、消耗大量内存的问题,可以通过以下策略进行优化:

    1. 连接池管理

      • 使用更高效的数据库连接池管理技术,如HikariCP、c3p0等,合理配置连接池大小,避免过度创建数据库连接。确保连接数既能满足数据读取需求,又不至于过度消耗资源。[1]
    2. 资源限制与优化

      • 在Flink作业配置中,合理设置Task Managers的数量及其内存分配,避免不必要的资源浪费。根据实际数据吞吐量和复杂度调整并行度,避免因并行度过高导致的Session资源占用过多。[1][2]
    3. SQL作业优化

      • 优化SQL查询逻辑,尽量减少不必要的JOIN操作和全表扫描,使用有效的索引策略减少数据库访问次数,从而降低Session的使用频率和持续时间。
    4. 分批读取策略

      • 考虑在Flink CDC的配置中采用分批读取数据的方式,而不是一次性加载大量数据,这样可以减少单个Session的生命周期内处理的数据量,减轻内存压力。
    5. Oracle数据库层面优化

      • 调整Oracle数据库的会话参数,如SESSION_CACHE_ADVICE、OPEN_CURSORS等,根据系统实际情况优化数据库会话管理设置。
    6. 合理安排Checkpoint策略

      • 适当调整Checkpoint间隔和模式,减少因频繁Checkpoint引起的数据库连接活跃和资源锁定,从而间接优化Session管理。
    7. 监控与调优

      • 实施细致的系统监控,定期分析资源使用情况,包括但不限于内存、CPU、网络和数据库连接数。基于监控数据不断调整优化策略,确保资源高效利用。

    通过上述方法综合优化,可以在很大程度上缓解Flink CDC处理Oracle数据时因Session过多导致的内存消耗问题。不过,请注意,具体实施时需结合实际业务场景和资源条件做适当调整。

    2024-07-20 17:25:57
    赞同 展开评论 打赏
滑动查看更多

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

相关产品

  • 实时计算 Flink版
  • 热门讨论

    热门文章

    相关电子书

    更多
    PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践 立即下载
    PostgresChina2018_王帅_从Oracle到PostgreSQL的数据迁移 立即下载
    Oracle云上最佳实践 立即下载

    相关镜像