浪院長 浪尖聊大數據
今天,主要想聊聊spark streaming的使用心得。redis
主要是轉換算子,action,和狀態算子,這些其實,就按照api手冊或者源碼裏接口介紹結合業務來編碼。
其實,想用好spark streaming 掌握spark core,spark rpc,spark 任務調度,spark 並行度等原理還很是有必要。api
說到中間算子你們確定都會想到UpdateStateByKey等狀態。裏面不少注意事項,好比順序性,key的超時機制維護。這個適合數據量很少,尤爲是key的維度很少,value不大的狀況。
固然數據量上來了,要想維護中間狀態怎麼辦?其實這個時候確定是第三方存儲,好比redis,alluxio。redis更適合那種key帶超時機制的,而且數據量確定不能過大。而alluxio就很適合那種高吞吐量的,好比去重統計。緩存
direct streaming能保證僅一次處理,可是要求輸出存儲支持密等性,或者主動將結果更改成存在更新不存在插入。固然,若是外部存儲系統支持事務那就更嗨,能實現恰一次處理。
實際上在offset維護這個層面上,spark streaming 不一樣版本於kafka不一樣版本結合實現有很大不一樣。ide
我以爲對於監控告警及故障自動恢復,重要程度不亞於業務場景。由於再好的業務實現,架不住系統掛掉你不知道。由於你總不能二十四小時盯着系統。並且不少公司對故障自動恢復都有kpi,好比3min,人工去檢測故障並恢復不太可能,須要本身實現一套監控系統。大數據
調優對於spark streaming很是重要,由於一個批次處理延遲就會致使job堆積,結果輸出延遲,深圳任務掛掉數據丟失。調優其實最注重對spark 原理把控,數據量的瞭解及資源和數據的關係。編碼
源碼閱讀,爲了幫助你們更透徹的理解原理。主要會分三塊:
spark streaming 與kafka-0.8.2 direct stream。
spark streaming 與kafka-0.8.2 receiver based stream。
spark streaming 與kafka-0.10.2 direct api。spa