开发者社区 > 大数据与机器学习 > 正文

大佬,请问Flink CDC中oraclecdc 写数据出现的游标问题怎么解决呢,目前我是每条数据?

大佬,请问Flink CDC中oraclecdc 写数据出现的游标问题怎么解决呢,目前我是每条数据操作后会释放,但是发现多任务写入同一数据源的时候会出现数据库连接释放冲突问题,您遇到过吗?

展开
收起
真的很搞笑 2023-06-11 14:18:05 102 0
3 条回答
写回答
取消 提交回答
  • 不断追求着最新的技术和趋势,在云技术的世界里,我不断寻找着新的机会和挑战,不断挑战自己的认知和能力。

    在使用 Flink CDC 对 Oracle 数据库进行写入时,可能会出现游标问题。游标是指 Flink CDC 在执行写入操作时使用的查询语句,它会在数据库中不断地查询是否有新的数据需要写入。

    当多个任务同时向同一数据库源写入数据时,可能会导致游标冲突。这是因为 Flink CDC 在使用游标时是共享的,因此多个任务可能会同时访问相同的游标。如果游标操作不一致,可能会导致数据丢失或重复写入。

    为了解决这个问题,您可以考虑以下两种方案:

    使用独占游标:在执行写入操作之前,使用 Oracle 的 OPEN CURSOR 语句创建一个独占游标。这样可以保证只有单个任务能够访问游标,从而避免游标冲突。需要注意的是,独占游标可能会导致性能问题,因为 Oracle 需要锁游标来保证独占访问。

    使用多个游标:将 Flink CDC 的写入操作拆分为多个游标,每个游标处理一批数据。这样可以保证每个任务都能够访问到不同的数据,从而避免游标冲突。需要注意的是,拆分游标需要考虑数据量、游标操作时间和任务并行度等因素,以保证游标操作的正确性和性能。

    需要注意的是,以上方案都需要在 Oracle 数据库中进行配置和调整,例如设置独占游标和多游标策略等。如果您不熟悉 Oracle 数据库的操作,建议寻求专业人士的帮助。

    2023-06-15 23:07:58
    赞同 展开评论 打赏
  • 对于Oracle CDC的游标问题,我推荐您可以尝试以下几种方法:

    1. 提高游标的Fetch Size:游标的Fetch Size是指每次从数据库拉取数据的数量。可以调整Fetch Size的大小,提高数据的拉取效率和游标的性能,从而减少游标操作的次数。可以通过如下代码对Fetch Size进行设置:
    Properties props = new Properties();
    props.setProperty("fetch-size", "1000");
    OracleTableSource oracleTableSource = new OracleTableSource(jdbcUrl, username, password, query, props);
    
    1. 批量处理数据:建议您将操作并提交到数据库的批量数据进行批量处理。这样可以降低游标的操作频率,减少游标的开销,从而提高效率。

    2. 设置并行读取:使用并行读取可以提高CDB的数据拉取效率。可以通过如下修改进行设置:

    .streamEnvironment.setParallelism(3) // 将 parallelism 设置为类似于 source 分区数的值。
    

    针对数据库连接释放冲突的问题,建议您可以考虑使用连接池进行管理数据库连接。连接池可以对连接进行复用,减少连接创建和销毁的过程,提高性能,并且可以有效地避免连接释放冲突的问题。常用的开源连接池有 Druid、HikariCP 等等。

    2023-06-13 16:32:54
    赞同 展开评论 打赏
  • 不会oraclecdc哦,此回答整理自钉群“Flink CDC 社区”

    2023-06-11 14:26:11
    赞同 展开评论 打赏

大数据领域前沿技术分享与交流,这里不止有技术干货、学习心得、企业实践、社区活动,还有未来。

相关产品

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

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