我有幾個關於flink並行性的問題。這是我的設置:Apache Flink:如何並行執行但保持消息順序?
我有1個主節點和2個從屬。在flink,我創建了3個卡夫卡消費者,每個卡夫卡消費者從不同的主題消費。
由於元素的順序對我來說很重要,因此每個主題只有一個分區,並且我使用flink設置來使用事件時間。
然後我跑在每個數據流的下面管道(在僞代碼):
source
.map(deserialize)
.window
.apply
.map(serialize)
.writeTo(sink)
到現在爲止,我開始了我弗林克程序與假設,這將允許我使用這兩個參數-p 2
我的節點。結果並不是我所希望的,因爲我的輸出順序有時會混亂。
通過弗林克文檔閱讀,並試圖更好地理解它,可能有人請確認我下面的「學習收穫「?
1)傳遞-p 2
僅配置任務並行,即並行實例的最大數目後任務(如map(deserialize)
)將被分割成若想保持整個管道的順序,我必須使用-p 1
2.)這對我來說似乎是矛盾的/混亂的:即使並行性設置爲1,不同的任務仍然可以同時運行(同時),因此我的3個管道也將在pa中運行如果我通過-p 1
拉勒爾。
而作爲一個跟進的問題:有沒有辦法找出哪些任務被映射到任務插槽,這樣我可以證實並行執行自己?
我將不勝感激!
更新
Here是-p 2
弗林克的執行計劃。
我上傳了我的flink程序的執行計劃,在那裏你可以看到在最後一個地圖之前有一個重新平衡。根據[這些](https://ci.apache.org/projects/flink/flink-docs-release-1.3/concepts/programming-model.html#parallel-dataflows)flink docs命令不保證與rebalance( )。我假設寫給卡夫卡的兩個子任務之間存在競爭條件,並且弄亂了我的輸出順序。因此,我認爲並行性> 1會弄亂我的結果。 – BenScape