2016-11-09 150 views
0

當前設置:Spark Streaming作業處理時間序列數據的Kafka主題。每隔一秒鐘,新的數據就會包含不同的傳感器。此外,批處理間隔爲1秒。通過updateStateByKey()有狀態數據被計算爲新的流。只要這個有狀態數據超過閾值,就會在Kafka主題上生成一個事件。當價值後來降到tresh以下時,再次發生一個事件被激發的話題。用於kafka主題後處理的spark-streaming批處理間隔

到目前爲止,這麼好。

問題:當通過重新構建卡夫卡主題在數據上應用新算法時,我希望這樣快速。但是這意味着每批都包含(數百)數千條消息。將這些內容在1批中移至updateStateByKey(),可以在結果數據流中得到1個該密鑰的計算值。

當然,這是不可接受的,因爲數據點的負載減少到一個。在實時流上生成的報警事件將不在重新計算的流上。所以用這種方法比較算法是完全沒有用的。

問題:我該如何避免這種情況?最好不要切換框架。在我看來,我正在尋找一個真正的流媒體(每次1個事件)框架。另一方面,Spark流對我來說是新的,所以我肯定錯過了很多。

+0

你的問題太抽象了!一些代碼和細節可能會有幫助。 – rakesh

回答

0

在spark 1.6中,引入了一個用於與狀態進行交互的新API mapWithState。我相信這會解決你的問題。

看看吧here