簡體   English   中英

Apache Flink:增量窗口計算

[英]Apache Flink: Incremental Window Computation

在 Apache Flink 中使用滑動時間窗口時,窗口中的許多元組/元素會隨着窗口滑動而重新計算。 例如,假設一個大小為 5 秒的窗口,幻燈片為 1 秒,則 80% 的窗口內容與最后一個窗口的內容相同。

window(SlidingEventTimeWindows.of(Time.seconds(5), Time.seconds(1)))

考慮一個數據流 S,它的元組由一個時間戳和一個整數值組成:<t1,12>, <t2,3>, <t3,15>, <t4,7>, <t5,9>, <t6, 18>, <t7,2>, ...

假設 t1, t2, t3, ... 表示連續的時間戳,其中 t2-t1 = 1 秒。 給定 S,窗口大小為 5 秒、幻燈片為 1 秒的 Flink 窗口化ProcessWindowFunction得到如下元組:

Window1: <t1,12>, <t2,3>, <t3,15>, <t4,7>, <t5,9>
Window2: <t2,3>, <t3,15>, <t4,7>, <t5,9>, <t6,18>
Window3: <t3,15>, <t4,7>, <t5,9>, <t6,18>, <t7,2>
...

雖然我可以使用狀態變量來存儲先前重疊窗口計算的結果,但我找不到過濾掉下一個窗口中重疊元組的方法。

我能想到的一個解決方案是利用最后一個窗口結束時間戳來忽略當前ProcessWindowFunction 中的計算,但這樣做只會節省一點計算,因為元組已經在ProcessWindowFunction 中 有沒有辦法在到達ProcessWindowFunction之前過濾掉重疊的元組?

我不明白手頭的問題是什么:性能? 還是只有不重疊的元組? 所以我會回答兩個:


具有非重疊元組

好像你需要:

window(TumblingEventTimeWindows.of(Time.seconds(1)))

表現

實際上,窗口切片重疊,並且可以保留一些計算/狀態。 一些研究人員已經開始用“ Scotty:無序流處理的高效窗口聚合”來解決這個問題。

我相信它在 Flink 中確實有效,但作為一個單獨的庫。 我們都在等待一個慈善的靈魂在 Flink 中合並他們的工作。

暫無
暫無

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

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