2016-12-31 37 views
1

我是一名Flink初學者。監測一系列事件一段時間,然後作出決定

教程無論我看到關注非常簡單的邏輯與飛行數據。 當溫度爲x秒內> 100一樣,等

How do I bring in a a logic like this 
1. When the temperature is 90 deg for 10 consecutive records 
2. When the temperature for the last 10 minutes is < 90 

一個stypid問題,是否阿帕奇弗林克支持這種模式

我可以看到within x seconds但沒有像for x minutes/for x records

回答

2

您當然可以通過Flink解決這些用例。

我將在下面使用Flink的窗口操作符來概述一些解決方案。請注意,還有其他方法可以使用自定義函數/運算符來執行此操作,這些函數可以提供更低的延遲和更少的狀態來處理,但需要更多用戶定義的代碼。

  1. 當溫度爲10條連續記錄90度:

這可以使用由一個記錄收集十個記錄和滑動的滑動窗口來完成。您應該將窗口函數實現爲ReduceFunction,該函數立即將窗口的記錄合併爲一個布爾值,該值表示所有溫度是否大於90度或者是否大於90度。這將把空間需求減少到每個窗口一個記錄,即一次10個記錄(因爲同時計算10個窗口)。請注意,計數窗口可能會有問題,因爲在分佈式流處理器中排序有點難以推理。

  • 當溫度爲最後10分鐘大於90度的視角:
  • 這可以使用滑動時間窗,例如來進行,在10分鐘內一個窗口其中滑動一分鐘。這會給你1分鐘的分辨率,即每分鐘檢查最後10分鐘的溫度。再次,每個窗口會有一個記錄(每次10個窗口10分鐘/ 1分鐘窗口,每次20分鐘,10分鐘/ 30秒窗口......)。其他邏輯與上述計數方法相同。如果您使用事件時間邏輯,則可以使用無序時間戳控制記錄。

    根據您的使用情況,窗口方法可能已足夠。如果您需要更好的延遲時間,或者您還可以在有狀態的FlatMapFunction(最後10條記錄)或有狀態ProcessFunction中實施您的用例,從而使您可以訪問時間戳和水印以實現更好的時間控制。

    Flink的CEP庫可以檢測到更復雜的圖案。

    +0

    這是一個偉大的開始。感謝指針。順便說一句。你如何看待那篇文章。我看到它在這裏https://flink.apache.org/news/2015/12/04/Introducing-windows.html。我如何獲得這篇文章。因爲「窗口」這個詞是如果有的話,我會馬上用google搜索它! – madhairsilence

    相關問題