[英]Multiple jobs or multiple pipelines in one job in Flink
我有一個用例,我想在Flink上運行2個獨立的處理流程。 所以2流看起來像
Source1 - > operator1 - > Sink1
Source2 - > operator2 - > Sink2
我想為兩個流重用相同的Flink集群。 我可以想到以兩種方式做到這一點:
1)在同一個Flink應用程序上提交2個不同的工作
2)在同一工作中設置2個管道
我能夠設置第一個選項,但不知道如何做第二個選項。 有沒有人嘗試過這樣的設置? 一個優於另一個的優勢是什么?
您可以在setupJob()方法中創建多個管道(使用單獨的或共享的源使用者)。 這是一個例子:
private void buildPipeline(StreamExecutionEnvironment env, String sourceName, String sinkName) {
DataStream<T> stream = env
.addSource(getInputs().get(sourceName))
.name(sourceName);
stream = stream.filter(evt -> filter());
....
}
@Override
public void setupJob(AthenaFlinkJobConfiguration jobConfig, StreamExecutionEnvironment env) throws Exception {
...
buildPipeline(env, sourceTopic1, sink1, ...);
buildPipeline(env, sourceTopic2, sink2, ...);
...
}
這是兩種方法的快速對比。 使用單獨工作的優點/缺點:
在單個作業中使用單獨管道的好處:
第二種方法可以通過在同一個StreamExecutionEnvironment
定義兩個獨立的管道並只調用一次StreamExecutionEnvironment.execute()
。
我會使用第一種方法,因為它可以讓你更好地隔離。 如果發生故障,Flink會重新啟動整個作業。 因此,如果在同一作業中實現兩個管道,則兩個管道都將在發生故障時重置並重新啟動。 如果您遵循方法一,您也可以獨立采取保存點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.