Databricks最近對1400多家Spark用戶進行了一次調查,結果顯示這些用戶對Spark Streaming的使用率與2014年相比增長了56%,另外,有48%的受訪者將Spark Streaming標記為最常用的Spark組件。在Spark Streaming不斷增長的用戶群中,Uber、Netflix和Pinterest等家喻戶曉的公司赫然在列,那么為什么使用Spark Streaming加速業務發展的公司越來越多呢?最近Spark Streaming的主要開發人員Tathagata Das在DataNami上發表了一篇文章,從需求、功能以及用戶場景等方面對此進行了介紹。流分析的需求現在,幾乎所有的公司都是一家軟件公司,它們實時地監控傳感器、物聯網設備、社交網絡和在線事務系統產生的數據,然后通過大規模、實時的流處理系統對其進行分析從而實現快速響應。此外,公司還會使用這些數據生成日報和業務模型。也就是說,現代流處理框架不僅需要應對實時場景,還需要處理預處理和后處理等非實時場景。例如,電商需要對用戶在線購買時產生的數據(包括日期、時間、物品、價格等)進行實時分析完成廣告推送和相關性推薦。銀行需要使用訓練好的欺詐模型實時地對每一筆交易進行檢測從而定位欺詐行為。Spark Streaming不僅能夠非常好地解決這些問題,同時它還統一了技術框架,使用了與Spark一致的編程模型和處理引擎。而在Spark Streaming出現之前,用戶需要借助多種開源軟件才能構建出具有流處理、批處理和機器學習能力的系統。
Spark Streaming能夠按照batch size(如1秒)將輸入數據分成一段段的離散數據流(Discretized Stream,即DStream),這些流具有與RDD一致的核心數據抽象,能夠與MLlib和Spark SQL等Spark組件無縫集成。
通過Spark Streaming開發者能夠容易地使用一種框架滿足所有的處理需求,例如通過MLlib離線訓練模型,然后直接在Spark Streaming中使用訓練好的模型在線處理實時數據。同時,開發者編寫的代碼和業務邏輯也能夠在流處理、批處理和交互式處理引擎中共享和重用。此外,流數據源中的數據還可以與很多其他的Spark SQL能夠訪問的靜態數據源進行聯合。例如,在將Amazon Redshift的靜態數據推送到下游系統之前,可以先將其加載到Spark的內存中進行處理以豐富流數據。用例——從Uber到Pinterest雖然針對不同的目標和業務案例使用Spark Streaming的方式也不同,但其主要場景包括:流ETL——將數據推入存儲系統之前對其進行清洗和聚合
觸發器——實時檢測異常行為并觸發相關的處理邏輯
數據濃縮——將實時數據與靜態數據濃縮成更為精煉的數據以用于實時分析
復雜會話和持續學習——將與實時會話相關的事件(例如用戶登陸Web網站或者應用程序之后的行為)組合起來進行分析。
例如,Uber通過Kafka、Spark Streaming和HDFS構建了持續性的ETL管道,該管道首先對每天從移動用戶那里收集到的TB級的事件數據進行轉換,將原始的非結構化事件數據轉換成結構化的數據,然后再進行實時地遙測分析。Pinterest的ETL數據管道始于Kafka,通過Spark Streaming將數據推入Spark中實時分析全球用戶對Pin的使用情況,從而優化推薦引擎為用戶顯示更相關的Pin。Netflix也是通過Kafka和Spark Streaming構建了實時引擎,對每天從各種數據源接收到的數十億事件進行分析完成電影推薦。