我正在寻找一种解决方案,我可以在执行过程中更改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");
我正在考虑围绕SourceFunction
的真实实现创建一个包装器,它将在需要时替换幕后实现,但会遇到SourceContext
的概念。
答案 0 :(得分:1)
Flink Forward发表了一篇关于一些相关问题的演讲。我想你会发现它很有帮助。请参阅Bootstrapping State In Apache Flink。
答案 1 :(得分:0)
您可以连接两个源函数的流,并将它们运行到CoMapFunction
。在其中你可以决定丢弃哪个,但是假设后来的源没有输出数据,直到你准备切换到它。
答案 2 :(得分:0)
好的,作为替代方案,您可以查看我之前在SO上提供的答案,并将一些示例代码添加到wrap multiple sources。但请注意Fabian的评论,如果下游运算符的并行性也是1,这只会保留顺序。