天天看點

Spark Streaming實時流處理項目實戰(二)初識實時流處理1.業務現狀分析2.實時流處理産生背景3.實時流處理概述4.離線計算與試試計算對比5.實時流處理架構對比6.實時流處理架構與技術選型7.實時流處理在企業中的應用

初識實時流處理

  • 1.業務現狀分析
  • 2.實時流處理産生背景
  • 3.實時流處理概述
  • 4.離線計算與試試計算對比
  • 5.實時流處理架構對比
  • 6.實時流處理架構與技術選型
  • 7.實時流處理在企業中的應用

1.業務現狀分析

需求: 統計某主站上課程通路的用戶端地域資訊分布

  問題:按小時級别統計、10分鐘、5分鐘、1分鐘、秒級别

  分析:小時統計時是可以使用MapReduce來進行離線處理的,但是分鐘級别和秒級别時使用MR來做計算就不太靠譜了,因為MapReduce在執行時延時性比較高,适合做離線批處理,MapReduce有MapTask和ReduceTask,每次都會啟動程序,運作完之後銷毀程序,啟動和銷毀都會占用一定的時間。是以MapReduce不适合做實時的計算

2.實時流處理産生背景

  1. 時效性高
  2. 資料量大

3.實時流處理概述

  1. 實時計算

    實時計算一般都是針對海量資料進行的,一般要求為秒級。

  2. 流式計算

    在不斷産生的資料流上進行計算,資料是源源不斷的

  3. 實時流式計算

    1+2 就等于實時流式計算,即在不斷産生的資料流上面進行實時計算

4.離線計算與試試計算對比

  1. 資料來源

    離線:HDFS上的曆史資料,資料量較大

    實時:消息隊列(Kafka),實時新增/修改記錄過來的某一條資料

  2. 處理過程

    離線:MapReduce ==》map + reduce兩個階段構成

    實時:Spark(DStream/SS)

  3. 處理速度

    離線:慢

    實時:快速

  4. 程序

    離線:啟動+銷毀

    實時:7*24不間斷

5.實時流處理架構對比

常見實時流處理架構

  • Apache Storm
  • Apache Spark Streaming
  • IBM Stream
  • Linked Kafka
  • Apache Flink

Storm是由Twitter開源的分布式、高容錯的實時處理系統,它的出現令持續不斷的流計算變得容易,彌補了Hadoop批處理所不能滿足的實時要求。

Spark streaming:是Spark核心API的一個擴充,可以實作高吞吐量的、具備容錯機制的實時流資料的處理。

這裡隻介紹一下Storm和Spark Streaming這兩種架構之前的差別

1.處理模型以及延遲

  雖然這兩個架構都提供可擴充性(Scalability)和可容錯性(Fault Tolerance),但是它們的處理模型從根本上說是不一樣的。Storm處理的是每次傳入的一個事件,而Spark Streaming是處理某個時間段視窗内的事件流。是以,Storm處理一個事件可以達到亞秒級的延遲,而Spark Streaming則有秒級的延遲。

2.容錯和資料保證

  在容錯資料保證方面的權衡方面,Spark Streaming提供了更好的支援容錯狀态計算。在Storm中,當每條單獨的記錄通過系統時必須被跟蹤,是以Storm能夠至少保證每條記錄将被處理一次,但是在從錯誤中恢複過來時候允許出現重複記錄,這意味着可變狀态可能不正确地被更新兩次。而Spark Streaming隻需要在批處理級别對記錄進行跟蹤處理,是以可以有效地保證每條記錄将完全被處理一次,即便一個節點發生故障。雖然Storm的 Trident library庫也提供了完全一次處理的功能。但是它依賴于事務更新狀态,而這個過程是很慢的,并且通常必須由使用者實作。

  簡而言之,如果你需要亞秒級的延遲,Storm是一個不錯的選擇,而且沒有資料丢失。如果你需要有狀态的計算,而且要完全保證每個事件隻被處理一次,Spark Streaming則更好。Spark Streaming程式設計邏輯也可能更容易,因為它類似于批處理程式,特别是在你使用批次(盡管是很小的)時。

3.實作和程式設計API

  Storm主要是由Clojure語言實作,Spark Streaming是由Scala實作。如果你想看看這兩個架構是如何實作的或者你想自定義一些東西你就得記住這一點。Storm是由BackType和 Twitter開發,而Spark Streaming是在UC Berkeley開發的。

  Storm提供了Java API,同時也支援其他語言的API。 Spark Streaming支援Scala和Java語言(其實也支援Python)。另外Spark Streaming的一個很棒的特性就是它是在Spark架構上運作的。這樣你就可以想使用其他批處理代碼一樣來寫Spark Streaming程式,或者是在Spark中互動查詢。這就減少了單獨編寫流批量處理程式和曆史資料處理程式。

4.生産支援

  Storm已經出現好多年了,而且自從2011年開始就在Twitter内部生産環境中使用,還有其他一些公司。而Spark Streaming是一個新的項目,并且在2013年僅僅被Sharethrough使用(據作者了解)。

  Storm是 Hortonworks Hadoop資料平台中流處理的解決方案,而Spark Streaming出現在 MapR的分布式平台和Cloudera的企業資料平台中。除此之外,Databricks是為Spark提供技術支援的公司,包括了Spark Streaming。

5.叢集管理內建

  盡管兩個系統都運作在它們自己的叢集上,Storm也能運作在Mesos,而Spark Streaming能運作在YARN 和 Mesos上。

6.實時流處理架構與技術選型

Spark Streaming實時流處理項目實戰(二)初識實時流處理1.業務現狀分析2.實時流處理産生背景3.實時流處理概述4.離線計算與試試計算對比5.實時流處理架構對比6.實時流處理架構與技術選型7.實時流處理在企業中的應用

7.實時流處理在企業中的應用

  • 電信行業中流量短信提醒
  • 電商行業

繼續閱讀