Apache flink 在不中断执行的情况下更改Flink中的源函数

Apache flink 在不中断执行的情况下更改Flink中的源函数,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我正在寻找一个解决方案,如何在执行过程中更改Flink中的源函数: StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); SourceFunction<String> mySource = ...; // this a function that I want to change during runtime; DataStream<String> s

我正在寻找一个解决方案,如何在执行过程中更改Flink中的源函数:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

SourceFunction<String> mySource = ...; // this a function that I want to change during runtime;
DataStream<String> stream = env.addSource(mySource); 

stream.map(...).print(); // creating my stream

env.execute("sample");
StreamExecutionEnvironment env=StreamExecutionEnvironment.getExecutionEnvironment();
SourceFunction mySource=…;//这是我想在运行时更改的函数;
DataStream stream=env.addSource(mySource);
stream.map(…).print();//创建我的流
环境执行(“样本”);

我正在考虑围绕
SourceFunction
的实际实现创建一个包装器,在需要时可以替换幕后的实现,但是遇到了
SourceContext
的概念,您可以将两个源函数的流连接起来,并将它们运行到
CoMapFunction
中。在这里面,您可以决定放弃哪一个,但前提是在您准备切换到数据源之前,后面的数据源不会输出数据。

Flink Forward上有一次讨论,讨论了一些相关问题。我想你会发现这很有帮助。请参阅。

好的,作为替代方案,您可以查看我之前提供的答案,以及一些示例代码。但请注意Fabian的评论,即只有当下游操作符的并行度也为1时,这才会保持顺序。

这不是我想要的。我想有一个方法来创建一个新的源函数的飞行和取代现有的一个。谢谢分享。这很有用,但不能回答我的问题。嗨,斯蒂芬。你能知道怎么做吗?