簡體   English   中英

Flink:廣播運營商鏈

[英]Flink: Broadcasted Operator chaining

假設我有一個事件數據流,並且我想將它廣播到鏈接到另一個(豐富)地圖運算符(map2)的(豐富)地圖運算符(map1)。 兩張圖的平行度是一樣的。 我想要的是 map1 的每個並行實例的輸出轉到 map2 的一個並行實例(即,兩個地圖之間沒有廣播)。 這是我到目前為止所做的,但我不確定它在邏輯上是否正確。 可以嗎?

val trainedStream = events.broadcast.map(new Mapper1(...)).setParallelism(par)
trainedStream.startNewChain.map(new Mapper2(...)).setParallelism(par)

后續問題:map1 和 map2 的兩個鏈接子任務/並行實例的 SubtaskIndex(從 RuntimeContext.getIndexOfThisSubtask 接收)是否相同? 有沒有辦法檢查這個?

代碼在 Scala 中,但我猜這同樣適用於 Java

只要有可能,鏈接就會在 Flink 中自動發生。 所以,在你的例子中,只要使用就足夠了

val trainedStream = events.broadcast.map(new Mapper1(...)).map(new Mapper2(...))

我會在env上設置並行性。

順便說一句,您確定要廣播這些事件嗎? 默認情況下, Datastream是並行處理的。 廣播事件是非常不尋常的,因為它們會根據並行性被多次處理。

后續問題:map1 和 map2 的兩個鏈接子任務/並行實例的 SubtaskIndex(從 RuntimeContext.getIndexOfThisSubtask 接收)是否相同? 有沒有辦法檢查這個?

子任務索引對於鏈式運算符是相同的,因為它們駐留在同一任務中(因此它們甚至不能具有不同的索引)。 如果您有任務mapper1 -> mapper2 ,您可以看到鏈接成功。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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