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

在一个并行度下一个session id被重复占用但是在后面加上print()又不会报这个异常,为什么

请问flinc cdc 中mysql cdc用tableEnv.executeSql 执行任务,074e95dec3fd7fd3e9acb327c2df3ccc.png
在一个并行度下,一个session id被重复占用,但是在后面加上print(),又不会报这个异常,能够正常输出,这是为什么呀?

展开
收起
小易01 2023-07-19 18:39:20 63 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在 Flink CDC 中,MySQL CDC Connector 执行任务时,如果在一个并行度下出现了一个 session id 被重复占用的异常,可能是因为在同一并行度内的两个任务或线程同时使用了相同的 session id,导致冲突。
    解决这个问题的方法之一是为每个任务或线程创建独立的 session id,避免出现冲突。可以在任务或线程中使用单例模式或者工厂模式,为每个任务或线程创建独立的 session id。
    另外,关于您提到的在加上 print() 后不会报异常的情况,可能是因为在 print() 方法中创建了一个新的任务或线程,从而避免了原来的任务或线程使用相同的 session id。但是这种方式并不是一个稳定的解决方案,可能会出现其他的问题,建议还是使用上述的解决方法来避免出现 session id 冲突的问题。
    需要注意的是,在使用 Flink CDC MySQL CDC Connector 时,建议参考官方文档或社区论坛

    2023-07-29 19:15:14
    赞同 展开评论 打赏
  • 存在即是合理

    在并行度下,如果一个 session id 被重复占用,可能会导致数据不一致的问题。这是因为在并行度下,多个线程可能会同时访问同一个 session id,从而导致数据的不一致。而加上 print() 语句后,可能会使得程序等待一段时间,以确保所有线程都已经完成了对 session id 的访问,从而避免了数据不一致的问题。

    2023-07-24 16:31:05
    赞同 展开评论 打赏

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

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载