2017-06-22 46 views
1

我在本地計算機上開發一個Flink玩具應用程序,然後在真實羣集上部署真實的玩具應用程序。 現在我必須確定需要設置羣集的節點數量。關於Flink上的節點號

但是我仍然對有多少節點需要考慮執行我的應用程序感到困惑。

例如,如果我有以下代碼(從DOC):

DataStream<String> lines = env.addSource(new FlinkKafkaConsumer<>()...); 

DataStream<Event> events = lines.map((line)->parse(line)); 

DataStream<Statistics> stats = events 
     .keyBy("id"); 
     .timeWindow(Time.seconds(10)) 
     .apply(new MyWindowAggregationFunction()); 

stats.addSink(new RollingSink(path)); 
  • 這意味着,操作「上同一行」在相同的節點上執行? (這聽起來有點怪我)

一些證實:

  • 如果回答前一個問題是肯定的,如果我設置並行至1,我可以建立我需要多少個節點計數如何我必須執行許多操作?

  • 如果我將並行度設置爲N,但我的可用節點少於N個,Flink會自動縮放可用節點上的精細度?

我的吞吐量和數據負載不相關我認爲這並不重要。

回答

0

如果您還沒有,我推薦閱讀https://ci.apache.org/projects/flink/flink-docs-release-1.3/concepts/runtime.html,它解釋了Flink運行時是如何組織的。

每個任務管理器(工作者節點)都有一定數量的任務插槽(至少一個),而Flink集羣需要的作業數量與作業中使用的最高並行度一樣多。所以如果整個作業具有一個並行性,那麼單個節點就足夠了。如果並行度是N並且少於N個任務槽可用,則該作業不能被執行。

Flink社區正在進行動態重新縮放,但從1.3版開始,它尚不可用。

+0

好的,但是,看看圖像: https://ibb.co/dCYVHk 我想建立一個像這樣的管道,其中每個圓代表一個不同的物理節點。在我看來,我的並行度爲'1',並且集羣是像圖像中的一組管道(也是因爲我有一個無界流,所以我更喜歡如果每個節點必須執行快速操作(實時)以避免創建長隊列) –

+0

Flink可以靈活地按照您描述的方式進行配置。您可以安排每個插槽有多個CPU,並且您還可以通過任務鏈和資源組來控制操作員分組(https://ci.apache.org/projects/flink/flink-docs-release -1.3的/ dev/datastream_api.html#任務鏈和資源-組)。 –