Spark 系列(十三)—— Spark Streaming 與流處理

1、流處理

1.1 靜態數據處理

在流處理以前,數據一般存儲在數據庫,文件系統或其餘形式的存儲系統中。應用程序根據須要查詢數據或計算數據。這就是傳統的靜態數據處理架構。Hadoop 採用 HDFS 進行數據存儲,採用 MapReduce 進行數據查詢或分析,這就是典型的靜態數據處理架構。html

1.2 流處理

而流處理則是直接對運動中的數據的處理,在接收數據時直接計算數據。git

大多數數據都是連續的流:傳感器事件,網站上的用戶活動,金融交易等等 ,全部這些數據都是隨着時間的推移而建立的。github

接收和發送數據流並執行應用程序或分析邏輯的系統稱爲流處理器。流處理器的基本職責是確保數據有效流動,同時具有可擴展性和容錯能力,Storm 和 Flink 就是其表明性的實現。數據庫

流處理帶來了靜態數據處理所不具有的衆多優勢:apache

  • 應用程序當即對數據作出反應:下降了數據的滯後性,使得數據更具備時效性,更能反映對將來的預期;
  • 流處理能夠處理更大的數據量:直接處理數據流,而且只保留數據中有意義的子集,並將其傳送到下一個處理單元,逐級過濾數據,下降須要處理的數據量,從而可以承受更大的數據量;
  • 流處理更貼近現實的數據模型:在實際的環境中,一切數據都是持續變化的,要想可以經過過去的數據推斷將來的趨勢,必須保證數據的不斷輸入和模型的不斷修正,典型的就是金融市場、股票市場,流處理能更好的應對這些數據的連續性的特徵和及時性的需求;
  • 流處理分散和分離基礎設施:流式處理減小了對大型數據庫的需求。相反,每一個流處理程序經過流處理框架維護了本身的數據和狀態,這使得流處理程序更適合微服務架構。

2、Spark Streaming

2.1 簡介

Spark Streaming 是 Spark 的一個子模塊,用於快速構建可擴展,高吞吐量,高容錯的流處理程序。具備如下特色:架構

  • 經過高級 API 構建應用程序,簡單易用;
  • 支持多種語言,如 Java,Scala 和 Python;
  • 良好的容錯性,Spark Streaming 支持快速從失敗中恢復丟失的操做狀態;
  • 可以和 Spark 其餘模塊無縫集成,將流處理與批處理完美結合;
  • Spark Streaming 能夠從 HDFS,Flume,Kafka,Twitter 和 ZeroMQ 讀取數據,也支持自定義數據源。

2.2 DStream

Spark Streaming 提供稱爲離散流 (DStream) 的高級抽象,用於表示連續的數據流。 DStream 能夠歷來自 Kafka,Flume 和 Kinesis 等數據源的輸入數據流建立,也能夠由其餘 DStream 轉化而來。在內部,DStream 表示爲一系列 RDD框架

2.3 Spark & Storm & Flink

storm 和 Flink 都是真正意義上的流計算框架,但 Spark Streaming 只是將數據流進行極小粒度的拆分,拆分爲多個批處理,使得其可以獲得接近於流處理的效果,但其本質上仍是批處理(或微批處理)。ide

參考資料

  1. Spark Streaming Programming Guide
  2. What is stream processing?

更多大數據系列文章能夠參見 GitHub 開源項目大數據入門指南微服務

相關文章
相關標籤/搜索