簡體   English   中英

在 Flink 中使用相同的滑動窗口加入 2 個以上的流

[英]Joining more than 2 streams using the same sliding window in Flink

我有 3 個流 A、B 和 C,我應該將它們加入一個流中,讓我們稱之為 ABC 並對其進行一些操作。

重要的是我使用大小為 X 的滑動窗口和滑動 Y,其中 Y <= X*3

所有的流都包含一些我用於連接的通用 ID,X、Y 是以秒為單位定義的時間參數。

我目前的實現是使用大小為 X 的滾動窗口將流 A 和 B 連接到 AB 中,然后使用大小為 X 和幻燈片 Y 的滑動窗口將 AB 與 C 連接。

在以下情況下,這可能會導致錯誤答案:流 A 在時間 0 接收消息,流 B 在時間 Y+1 接收消息。 在這種情況下,兩條消息都應該進入同一個滑動窗口,因為 Y+1 < X,但最終結果是當我加入 AB 和 C 時,由於初始滾動窗口,來自 B 的消息丟失。

我可以使用單個滑動窗口在 Flink 中進行多流連接,類似於在 Spark 中連接多個數據幀的方式嗎?

我認為在這種情況下可以使用兩個滑動窗口連接 - 一個用於計算 AB,另一個將這些結果與 C 連接。您可能遇到的一個問題是第一次連接生成的記錄上的時間戳 - - 我不確定 Flink 會將哪些時間戳放入包裝 AB 事件的 StreamRecords 中,但對於普通(非加入)窗口,Flink 將結果記錄上的時間戳設置為窗口結束時間。 在這種情況下,這可能不是您想要的。 如果這是一個問題,您可以在第一個滑動窗口之后放置一個額外的時間戳分配器,以在第二次加入(使用 C)之前適當地設置時間戳。

暫無
暫無

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

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