flink流計算隨筆(4)

Flink中的程序本質上是並行的和分佈式的。在執行期間,流有一個或多個流分區,每個操作符有一個或多個操作符子任務。操作符子任務相互獨立,在不同的線程中執行,可能在不同的機器或容器上執行。

運算符子任務的數量是特定運算符的並行度。一個流的並行性總是它的生產操作符的並行性。同一程序的不同運算符可能具有不同級別的並行性。

流可以在兩個操作符之間以一對一(或轉發)模式傳輸數據,也可以在重分發模式中傳輸數據:

一對一One-to-one流(例如上圖中源和map()運算符之間的流)保持元素的分區和順序。這意味着map()操作符的子任務將看到與源操作符的子任務生成的元素相同的順序。

重新分佈Redistributing流(如上面的map()和keyBy/window之間,以及keyBy/window和Sink之間)改變流的分區。每個操作符子任務根據所選的轉換將數據發送到不同的目標子任務。例如:keyBy()(通過散列鍵來重新分區)、broadcast()或rebalanced()(隨機重新分區)。在重分發交換中,元素之間的順序只保留在每一對發送和接收子任務中(例如map()的子任務和keyBy/window的子任務)。因此,在本例中,每個鍵中的順序都是保留的,但是並行性確實引入了關於不同鍵的聚合結果到達sink的順序的不確定性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章