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

时间:2018-04-25 16:27:23

标签: apache-flink flink-streaming

我正在寻找一种解决方案,我可以在执行过程中更改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的概念。

3 个答案:

答案 0 :(得分:1)

Flink Forward发表了一篇关于一些相关问题的演讲。我想你会发现它很有帮助。请参阅Bootstrapping State In Apache Flink

答案 1 :(得分:0)

您可以连接两个源函数的流,并将它们运行到CoMapFunction。在其中你可以决定丢弃哪个,但是假设后来的源没有输出数据,直到你准备切换到它。

答案 2 :(得分:0)

好的,作为替代方案,您可以查看我之前在SO上提供的答案,并将一些示例代码添加到wrap multiple sources。但请注意Fabian的评论,如果下游运算符的并行性也是1,这只会保留顺序。