2016-04-07 46 views
0

我目前正在編寫一個使用Flink 1.0的聚合用例,作爲用例的一部分,我需要獲得最近10分鐘內記錄的api的數量。Flink在流數據上的全局聚合

這個我可以很容易地使用keyBy(「api」),然後應用10分鐘窗口和doe sum(count)操作。

但問題是,我的數據會出來的順序,所以我需要一些方法來獲得跨越10分鐘窗口的API的次數..

例如:如果相同的API日誌也有兩個不同的窗口,我應該得到一個全局計數,即2,而不是兩個單獨的記錄顯示每個窗口計數爲1。

我也不想增量計數,即用相同的密鑰每個記錄與數等於增量值顯示多次..

我想與全球數,喜歡的東西來顯示一次記錄Spark中的updateStateByKey()。

我們能做到嗎?

回答

0

您應該看看Flink的event-time feature,它可以爲亂序流生成一致的結果。事件時間意味着Flink將根據作爲事件一部分的時間戳處理數據,而不取決於機器的掛鐘時間。

如果你是你的事件時間(與適當的水印)。 Flink將自動處理無序到達的事件。

+0

謝謝!我已經在使用帶有水印的事件時間處理,並且能夠正常工作並給出預期的輸出,但是與此相關的問題是,在大約10分鐘+(因爲我的事件窗口爲10分鐘)之後,我看到輸出非常晚,這是我不喜歡的不想要。我希望輸出能夠立即發出,然後隨着處理過程更新結果。可以做到嗎? –

+0

在事件中,當水印通過窗口間隔時,即在你的水印表明已經過去10分鐘的情況下,評估窗口。如果在此之前發出窗口結果,則結果可能只是部分,因爲該窗口的更多數據可能會到達。如果您實施自定義觸發器,則可以在Flink中從窗口發出早期結果。這[博客文章](https://www.mapr.com/blog/essential-guide-streaming-first-processing-apache-flink)顯示瞭如何從窗口發出早期結果。 –

+0

我想寫一個自定義觸發器將解決我的問題。感謝您的建議。 –