请教大家Flink:我在多线程里面单独创建StreamExecutionEnvironment 执行env.addSource数据查询,然后env.excute,
为啥执行env.addSource后不往下执行env.excute了。导致认为没有提交?
请教大家Flink:为啥执行env.addSource后不往下执行env.excute了?[阿里云]
「点点赞赏,手留余香」
还没有人赞赏,快来当第一个赞赏的人吧!
请教大家Flink:我在多线程里面单独创建StreamExecutionEnvironment 执行env.addSource数据查询,然后env.excute,
为啥执行env.addSource后不往下执行env.excute了。导致认为没有提交?
在 Apache Flink 中,
StreamExecutionEnvironment
是线程不安全的。这意味着你不应该在一个多线程环境中共享同一个StreamExecutionEnvironment
对象。当你在一个多线程环境中创建多个
StreamExecutionEnvironment
实例,并分别执行它们时,Flink 会尝试为每个环境分配资源并启动一个独立的任务。然而,由于你的程序可能没有正确地管理这些环境和任务,导致某些任务无法正常执行或提交。为了避免这个问题,请考虑以下方法:
使用单线程:如果你的作业不需要利用多线程的优势,那么你可以将所有操作放在一个单独的线程中执行。这样可以确保你只使用一个
StreamExecutionEnvironment
对象,并且可以在其上调用execute()
方法来提交你的作业。同步访问环境:如果你需要在多线程中执行多个作业,你需要确保对
StreamExecutionEnvironment
的访问是线程安全的。这可以通过使用锁或者并发控制机制来实现。当一个线程正在执行一个作业时,其他线程必须等待,直到该作业完成并释放了环境。使用不同的进程或容器:如果你需要同时执行多个独立的 Flink 作业,建议使用不同的进程或者容器来隔离它们。这样可以避免资源争抢和潜在的线程安全问题。
升级到支持多环境的 Flink 版本:在一些较新的 Flink 版本中,已经提供了对多环境的支持。你可以查阅官方文档来了解如何在多线程环境下安全地使用 Flink。
建议用Flink的restful提交一个任务,先把Flink任务写好,把参数都预留出来,springboot取调flink的restful,启动一个任务。尽量不要把Flink和springboot耦合在一起,此回答整理自钉群“【③群】Apache Flink China社区”