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

请教大家Flink:为啥执行env.addSource后不往下执行env.excute了?

请教大家Flink:我在多线程里面单独创建StreamExecutionEnvironment 执行env.addSource数据查询,然后env.excute,
为啥执行env.addSource后不往下执行env.excute了。导致认为没有提交?

展开
收起
真的很搞笑 2023-11-30 13:14:37 59 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在 Apache Flink 中,StreamExecutionEnvironment 是线程不安全的。这意味着你不应该在一个多线程环境中共享同一个 StreamExecutionEnvironment 对象。

    当你在一个多线程环境中创建多个 StreamExecutionEnvironment 实例,并分别执行它们时,Flink 会尝试为每个环境分配资源并启动一个独立的任务。然而,由于你的程序可能没有正确地管理这些环境和任务,导致某些任务无法正常执行或提交。

    为了避免这个问题,请考虑以下方法:

    1. 使用单线程:如果你的作业不需要利用多线程的优势,那么你可以将所有操作放在一个单独的线程中执行。这样可以确保你只使用一个 StreamExecutionEnvironment 对象,并且可以在其上调用 execute() 方法来提交你的作业。

    2. 同步访问环境:如果你需要在多线程中执行多个作业,你需要确保对 StreamExecutionEnvironment 的访问是线程安全的。这可以通过使用锁或者并发控制机制来实现。当一个线程正在执行一个作业时,其他线程必须等待,直到该作业完成并释放了环境。

    3. 使用不同的进程或容器:如果你需要同时执行多个独立的 Flink 作业,建议使用不同的进程或者容器来隔离它们。这样可以避免资源争抢和潜在的线程安全问题。

    4. 升级到支持多环境的 Flink 版本:在一些较新的 Flink 版本中,已经提供了对多环境的支持。你可以查阅官方文档来了解如何在多线程环境下安全地使用 Flink。

    2023-11-30 22:23:29
    赞同 展开评论 打赏
  • 建议用Flink的restful提交一个任务,先把Flink任务写好,把参数都预留出来,springboot取调flink的restful,启动一个任务。尽量不要把Flink和springboot耦合在一起,此回答整理自钉群“【③群】Apache Flink China社区”

    2023-11-30 21:44:51
    赞同 展开评论 打赏

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

相关产品

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

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