簡體   English   中英

Flink中一個作業中的多個作業或多個管道

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM