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

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

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
1 条回复 A 作者 M 管理员
  1. 在 Apache Flink 中,StreamExecutionEnvironment 是线程不安全的。这意味着你不应该在一个多线程环境中共享同一个 StreamExecutionEnvironment 对象。

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

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

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

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

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

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

  2. 建议用Flink的restful提交一个任务,先把Flink任务写好,把参数都预留出来,springboot取调flink的restful,启动一个任务。尽量不要把Flink和springboot耦合在一起,此回答整理自钉群“【③群】Apache Flink China社区”