這是我想在 Apache Flink 中做的事情:輸入一個輸入,DataStream<T>然后按字段輸入x,然后執(zhí)行一個 15 分鐘的滑動窗口,該窗口每分鐘滑動一次,聚合每個鍵 ( x) 的結(jié)果,然后將所有這些聚合聚合到一個列表中基本上,如果我有一個輸入流,[(a, 1, Time 1), (b, 6, Time 14), (b, 1, Time 12)]我希望結(jié)果是[(a, 1), (b, 7)],通過對 15 分鐘滑動窗口和這個特定的滑動窗口進行操作。這可能嗎?
1 回答

慕運維8079593
TA貢獻1876條經(jīng)驗 獲得超5個贊
是的,這確實是可能的。Flink 的窗口 API 允許你跟隨一個鍵控窗口和一個非鍵控窗口。來自 Apache Flink 培訓(xùn)站點的這個練習(xí)涵蓋了這種模式。此外,請在文檔的此頁面上有關(guān) Windows 的“驚喜”列表中查找標(biāo)題為“Windows 可以跟隨 Windows”的部分。
粗略地說,你會這樣做:
stream .keyBy(e -> e.x) .timeWindow(Time.minutes(15), Time.minutes(1)) .process(new ProduceKeyedResults()) .timeWindowAll(Time.minutes(15), Time.minutes(1)) .process(new ProduceOverallResults())
您可能寧愿使用 aReduceFunction
或 anAggregateFunction
來代替WindowProcessFunctions
.
您會注意到時間窗口運算符產(chǎn)生的事件具有反映窗口本身時間邊界的時間戳,而不是與落入窗口的事件的時間戳有關(guān)。但是事件確實有時間戳,并且流仍然帶有水印——所以再次進行時間戳分配是沒有意義的。(另外值得注意的是,鍵控窗口產(chǎn)生的流不再鍵控。)
添加回答
舉報
0/150
提交
取消